带有2个参数的Django url模式错误解释了第二个参数

时间:2013-10-18 12:58:09

标签: django django-templates django-urls

我尝试使用this模式在URL中传递2个参数,其中第二个参数是可选的。这是我的代码:

urlpatterns = patterns('',
    url(r'^topic/(?P<topic>.*)/(?P<page>.*)/$', activities_list, 
    url(r'^topic/(?P<topic>.*)/$', activities_list, name='activities'),name='activities_page'),
)

除非第二个参数为1,否则此方法有效。在这种情况下,主题topic/1None。它适用于任何其他数字作为第二个参数。

谁能让我朝着正确的方向解决这个错误?


更新,这很奇怪

尝试了几件事后,我发现这个模板标签出现了问题:

<img src="{{recommendation.user_picture_url}}" />

当我删除此标记,或者甚至将其从 src 属性中删除并将其放在图像标记之外时,URL就可以使用了。该变量包含Linkedin服务器上LinkedIn头像的URL。

这是我的观点

def activities_list(request, topic, page=1):

    print topic
    print page
    ...
    return render_to_response(...

我不明白为什么我的视图从URL中获取错误的参数(如打印中所示),而孔响应甚至尚未呈现。

更新:解决了! (见下文)

2 个答案:

答案 0 :(得分:1)

使用非绿色限定符(.*?.+?):

urlpatterns = patterns('',
    url(r'^topic/(?P<topic>.+?)/$', activities_list, name='activities'),
    url(r'^topic/(?P<topic>.+?)/(?P<page>.+?)/$', activities_list, name='activities_page'),
)

对于页码,\d+更合适。

urlpatterns = patterns('',
    url(r'^topic/(?P<topic>.*?)/$', activities_list, name='activities'),
    url(r'^topic/(?P<topic>.*?)/(?P<page>\d+)/$', activities_list, name='activities_page'),
)

您也可以使用(?P<topic>.*?)

代替(?P<topic>[^/]+)

答案 1 :(得分:1)

经过大量挖掘后,我发现当我的测试数据库中的图片丢失时,模板标签会在图像标签src属性中给出None值。这导致请求服务器在URL / topic / 1 / None 上查找图像。不知何故,甚至在将响应发送给客户端之前就发生了这种情况,因此我的视图收到了新的错误参数。

我的模板页面上的这个标签... / topic / 1 /从... / topic / 1 / None请求图像,发送错误的参数。

<img src="{{recommendation.user_picture_url}}" />



PS感谢falsetru对正则表达式的改进