代码之家  ›  专栏  ›  技术社区  ›  Santiago

django:reverse()在向视图函数传递额外选项时失败

  •  0
  • Santiago  · 技术社区  · 4 年前

    我正在与Django的一个烦人的错误作斗争,我正在尝试反向()将元数据作为Python字典传递(我正在遵循文档,但它不起作用,你能帮我找出我缺少了什么吗?)

    这是我的url模式(正如你所看到的,我正在向视图函数传递额外的选项 described in the docs ):

    from django.urls import path
    from . import views
    
    urlpatterns = [
        ...,
        path("items/<int:item_id>", views.item_page, { 'message': None }, name="item page")
    ]
    

    在我的views.item_page函数中,我有以下内容: 像

    ...
    
    reversed_url = reverse("item page", kwargs={'item_id': item_id, 'message': 'hello'} )
    
    return HttpResponseRedirect(reversed_url)
    

    我遇到了这样的错误:

    Django Version:     4.0.4
    Exception Type:     NoReverseMatch
    Exception Value:    Reverse for 'item page' with keyword arguments '{'item_id': 2, 'message': 'hello'}' not found. 1 pattern(s) tried: ['items/(?P<item_id>[0-9]+)\\Z']
    

    这就像它在反转时不接受“消息”参数一样。

    1 回复  |  直到 4 年前
        1
  •  1
  •   Ayman    4 年前

    reverse将只接受 urlpattern 在你的模式中没有 message **如果要发送消息** 您可以使用 messages django中的模块

    from django.contrib import messages 
    
    # in View
    messages.success(request, 'Hello')
    ...
    

    请参阅文档 Sending messages

        2
  •  0
  •   nigel222    4 年前

    另一种将结构化的额外信息传递给下一个视图的方法是填充 request.GET 带有 Querydict 。类似

    qd = QueryDict( mutable=True)
    qd['whatever'] = 'whatever' # populate it as you wish next view's request.GET to be
    ...
    url = reverse('myapp:wherever', kwargs={ ...} ) # kwargs as defined in urls.py
    return HttpResponseRedirect( url + '?' + qd.urlencode() )