0

在使用平面页面时,我很难理解 django 中 url 路由的工作原理,并希望有人可以查看我的代码并解释我做错了什么。

此外,在调试此问题时提供一些建议会非常有帮助 - 理想情况下,当请求成功解决时,我想看看 django 如何达到该解决方案。目前,当我收到 404 时,我只看到尝试的 url 模式。

提前致谢,

在 settings.py 我有 - APPEND_SLASH = True

我有以下 url 结构,在括号中我已经指出我认为我的 reg ex该做什么..

#urls.py

url(r'^$', home), # (match / and nothing else)
url(r'^fa/$', home), # (match /fa and nothing else)
url(r'^en/$', en_home), # (match /en and nothing else)

url(r'^fa', include('ir_site.urls')), # (match any path like fa/*/) 
url(r'^en', include('en_site.urls')), # (match any path like en/*/)

#in ir_site.urls
urlpatterns = patterns('',
    url(r'contact/$', views.static_contact) # (match fa/contact)
)
urlpatterns += patterns('django.contrib.flatpages.views', 
    (r'^(?P<url>.*/)$', 'flatpage'), # (match any fa/*/ not resolved or 404)
)

#in en_site.urls
urlpatterns = patterns('',
    url(r'contact/$', views.static_contact) # (match en/contact)
)
urlpatterns += patterns('django.contrib.flatpages.views', 
    (r'^(?P<url>.*/)$', 'flatpage'), # (match any en/*/ not resolved or 404)
) 

我有以下平面页面

/en/test/
/fa/test/
/test/
/en/test2

测试结果:

/ - Fine
/en - Fine
/fa - Fine
/test - Fine    
/fa/test - Fine
/en/test - Extra / is appended results in 404
/en/test2 - Fine, but uses the flatpages template in the ir_site app
/en/contact - Fine
/fa/contact - Fine

我有一种感觉,问题在于 (r'^fa') 和 (r'^en') 无法正常使用平面页面的全部捕获,但我不知道如何理解为什么会这样,因为我缺乏任何类型的这个阶段的调试技巧。

非常感谢帮助...

4

2 回答 2

0

将您的 urls.py 更改为以下包含的内容。您需要在 url 上有一个尾随 /。

url(r'^fa/', include('ir_site.urls')),
url(r'^en/', include('en_site.urls')),

同样对于您的 url 参数,我认为您最好使用 a+而不是 a ,*因为它需要 1 个或更多字符,而 * 为 0 或更多。

最后,在 ir_site.urls 和 en_site.urls 中,您应该使用 an 引导联系人,^因此只有当联系人是 url 的第一部分(在 en/ 或 fa/ 之后)时,它才会匹配。

编辑:更改平面 url 模式。当前使用.将匹配一个/. 我给出的示例将匹配任何带有连字符的长字母数字字符。

(r'^(?P<url>[-\w]+)/$', 'flatpage'),
于 2014-02-22T16:10:18.390 回答
0

因此,通过删除 urls.py 中对平面页面的任何引用并仅使用中间件,我发现所有问题都消失了,一切都开始按预期工作。

于 2014-02-22T19:32:10.733 回答