错误的网址正在匹配

时间:2017-01-31 13:58:54

标签: python django url

我只想到达索引之外的另一个目录。

我输入“localhost:8000/ysynch/”之后我认为Django正在做什么:

  1. 检查“ysynch/urls.py”(我的根urls.py文件)
  2. 查找“ytlinks/”,包括“links.urls
  3. 与“ytlinks/”匹配(在文件“links.urls”中)并调用“views.ytlinks
  4. 但是,调用views.index。我在哪里犯了错误?

    根\ urls.py

    C:\ Users \用户的Xyron \桌面\ ysynch \ ysynch \ urls.py

    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^ytlinks/', include('links.urls')),
        url(r'^$', include('links.urls')),
    ]
    

    链接\ urls.py

    C:\ Users \用户的Xyron \桌面\ ysynch \链接\ urls.py

    urlpatterns = [
        url(r'^ytlinks/', views.ytlinks, name='ytlinks'),
        url(r'^$', views.index, name='index'),
    ]
    

3 个答案:

答案 0 :(得分:2)

因为路径已添加到包含

  url(r'^ytlinks/', include('links.urls')),

所以你有以下

# /ytlinks/ytlinks
url(r'^ytlinks/', views.ytlinks, name='ytlinks'),
# /ytlinks/
url(r'^$', views.index, name='index'),

所以当你调用/ ytlinks /时,你会进入ytlinks里面的视图,这又是索引视图

您要呈现的视图是/ ytlinks / ytlinks /

答案 1 :(得分:2)

  

检查“ysynch / urls.py”(我的根urls.py文件)

     

查找“ytlinks /”,包括“links.urls”

     

与“ytlinks /”(在文件“links.urls”中)匹配并调用“views.ytlinks”

网址中已匹配的部分将被排除在您的包含内的进一步匹配之外。

所以你基本上尝试再次匹配“ytlinks /”,这对于“ytlinks / ytlinks /”来说是正确的。您只想在links\urls.py

中进行匹配
urlpatterns = [
    url(r'^$', views.ytlinks, name='ytlinks'),
]

此文件中的所有网址都已与第一部分“ytlinks /”匹配,您只需要匹配其余内容,即您的情况为^$

答案 2 :(得分:1)

您混淆的主要部分是您希望每个urls.py尝试匹配整个网址,但您可以将include视为字符串连接并加入前面的部分url与下一个urls.py中的url部分

当django尝试匹配一个url时,它会在正则表达式列表中向下,直到找到匹配的那个,所以你拥有的是以下

r'^ytlinks/'   + r'^ytlinks/'   ==>  views.ytlinks
r'^ytlinks/'   + r'^$'   ==>  views.index
r'^$'          +  r'^ytlinks/'      ==>  views.ytlinks (not quite!)
r'^$'          +  r'^$'      ==>  views.index(not quite!)

所以匹配的第一个将是你网址的第二个。正则表达式中的$表示字符串的结尾,因此它不会在此处检查其后面的任何内容,因此您可以排除最后两个正则表达式。

所以你的修复是三重的,

  1. 您需要删除第一个正则表达式的链接/网址

    url(r'^ytlinks/', views.ytlinks, name='ytlinks'),
    
  2. 您需要从其他urls.py

    中删除包含网址中的$
    url(r'^', include('links.urls')), 
    
  3. 您需要修改每个链接应该转到的视图,以便最终得到以下结果

    根\ urls.py

    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^ytlinks/', include('links.urls')),
        url(r'^', views.index, name='index'),
    ]
    

    链接\ urls.py

    urlpatterns = [
        url(r'^$', views.ytlinks, name='ytlinks'),
    ]