如何让Django多参数url标签工作?

时间:2016-07-12 04:59:36

标签: python django django-templates django-views

我无法弄清楚我正在搞哪个部分!

我得到的错误是:

  

使用参数'()'和关键字参数反转'update_rating'   '{u'pk':9,u'on_title':True}'找不到。尝试过1种模式:   [ 'Y / update_rating / - /(P [\ W] +?)(P [真?|假])$']

url.py:(第一个是争用中的那个)

urlpatterns = [
    # Must be last url pattern, otherwise everything /y/ will use this pattern
    url('^update_rating/(?P<pk>[\w-]+)/(?P<on_title>[True|False])$', views.update_rating, name='update_rating'),
    url('^add_thing_with_rating/(?P<parent_pk>[\w-]+)$', views.add_thing_with_rating, name='add_thing_with_rating'),
    url('^add_thing_with_rating/', views.add_thing_with_rating, name='add_thing_with_rating'),
    url(r'^(?P<slug>[a-zA-Z0-9-\/]+)/?', views.thing_page),
]

thing_page.html 标记:

{% url 'update_rating' pk=thing.pk on_title=True %}

来自 views.py 的视图功能:

def update_rating(request, pk=None, on_title=False):

我对处理网址的整个方式感到很困惑,所以除了解决我的问题外,如果您对处理网址有任何进一步的建议,请不要犹豫,将其添加到您的答案中:)

1 个答案:

答案 0 :(得分:1)

此模式存在问题:

url('^update_rating/(?P<pk>[\w-]+)/(?P<on_title>[True|False])$', views.update_rating, name='update_rating')  

您将错误的正则表达式传递给变量,pk必须匹配整数,因此\d+和布尔值必须匹配单词\w+

url('^update_rating/(?P<pk>\d+)/(?P<on_title>\w+)/$', views.update_rating, name='update_rating')