2014-02-22 113 views
0

我有真正的麻烦了解如何使用网页时,在Django的url路由工程,并希望有人可以看看我的代码,并解释我做错了什么。Django的网址路由与网页

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

感谢,

在settings.py我有 - APPEND_SLASH =真

我有以下URL结构,括号我已经表明了我想我的REG前应该做..

#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“^恩”)不与闭锁正常工作,所有的flatpages但我不知道如何看到为什么这是因为我在这个阶段缺乏任何一种调试技巧。

帮助非常感谢...

回答

0

所以通过消除urls.py到的flatpages任何引用,只是使用中间件,我发现所有的问题消失了,一切都开始按预期运行。

0

更改您的urls.py为包括以下内容。你需要在URL上有一个/后面的。

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

也为你的URL参数,我想你会更好使用+而不是*,因为这将需要1个或多个字符,而*为0以上。

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

编辑: 更改flatpage网址格式。目前使用.将匹配/。我给出的示例将匹配长连字符的任何字母数字字符。

(r'^(?P<url>[-\w]+)/$', 'flatpage'), 
+0

嗯,试过这个,但它没有改变。问题是平板电脑网址,而不是总是解决好的联系网址。此外,它似乎恩/测试不会解决,因为Django解析为/ en /测试/ /(双斜杠)这是一个404 – rix

+0

请参阅我的编辑更改flatpage urlpattern。 – schillingt

+0

对不起,但不知道为什么将'。*'改为'[ - \ w] +'会有帮助? (我试过了,它没有..)问题是肯定与包括虽然当我评论'r'^ fa /'和'r'^ en /'平面网页仍然解决。问题是ir_site.urls和en_site.urls中的catchall模式 – rix