在Django URL调度程序上需要第二双眼睛

时间:2014-10-22 15:02:34

标签: django url dispatcher

想知道我是否可以用第二双眼睛得到一些帮助。大约两个月前开始在闲暇时间学习Django。长话短说:我的索引和帖子视图很好。我最近创建了一个联系人html \模板和视图,它看起来像是回到我的索引页面?这是我的项目urls.py

from django.conf.urls import patterns, include, url
from django.contrib import admin
from .settings import MEDIA_ROOT


urlpatterns = patterns('',

    url(r'^admin/', include(admin.site.urls)),
    url(r'^blog/', include('blog.urls')),
    url(r'^contact/', include('blog.urls')),
    url(r'^media/(?P<path>.*)$', 'django.views.static.serve',
        {'document_root': MEDIA_ROOT}),
)

这是我的应用urls.py

from django.conf.urls import patterns, include, url
from blog import views

urlpatterns = patterns('blog.views',
                       url(r'^(?P<post_name>\w+)/$', views.post, name='post'),
                       url(r'^contact/$', views.contact, name='contact'),
                       url(r'^$', views.index, name='index'),
)

如果我将我的联系人视图更改为我的默认视图,那么它就可以了。

urlpatterns = patterns('blog.views',
                       url(r'^(?P<post_name>\w+)/$', views.post, name='post'),
                       url(r'^$', views.contact, name='contact'),
                       #url(r'^$', views.index, name='index'),
)

当我点击我页面上的联系人链接时,只要将其切换回原始状态,它就会直接进入我的索引页面。我必须对URL调度程序部分做错了,但我不确定是什么。

3 个答案:

答案 0 :(得分:0)

请注意您应用的网址urls.py中的网址顺序。尝试将views.contact视图放在views.post视图之前。请记住:Django选择第一个匹配的正则表达式,即views.post视图。

我遇到了类似的问题并描述了解决方案here

答案 1 :(得分:0)

您的联系人网址与网址&#34; / contact&#34;不匹配,匹配&#34; / blog / contact&#34;和&#34; /联系/联系&#34;。由于您在这两个前缀下都包含了博客urlpatterns,因此匹配&#34; / contact&#34;是前缀后没有任何内容的URL,即索引。

您可能根本不想将联系模式放入包含的文件中:只需将其直接匹配到基础项目文件中即可。

答案 2 :(得分:0)

这里你的联系人视图有url / contact / contact /和index视图有url / contact /

所以你已经将项目网址重写为

from django.conf.urls import patterns, include, url
from django.contrib import admin
from .settings import MEDIA_ROOT


urlpatterns = patterns('',

    url(r'^admin/', include(admin.site.urls)),
    url(r'^blog/', include('blog.urls')),
    url(r'^', include('blog.urls')),
    url(r'^media/(?P<path>.*)$', 'django.views.static.serve',
       {'document_root': MEDIA_ROOT}),
)