1

我尝试使用模式在 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 中获取了错误的参数(如打印中所示),而孔响应甚至还没有呈现。

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

4

2 回答 2

1

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

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>[^/]+)

于 2013-10-18T13:02:10.627 回答
1

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

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

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



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

于 2013-10-18T14:45:18.323 回答