我尝试使用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/1
,页为None
。它适用于任何其他数字作为第二个参数。
谁能让我朝着正确的方向解决这个错误?
更新,这很奇怪
尝试了几件事后,我发现这个模板标签出现了问题:
<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中获取错误的参数(如打印中所示),而孔响应甚至尚未呈现。
更新:解决了! (见下文)
答案 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对正则表达式的改进