匹配的url错误

2024-09-30 06:19:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我只想进入另一个目录而不是索引。你知道吗

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

  1. 正在检查“ysynch/urls.py”(我的根目录网址.py文件)
  2. 发现“ytlinks/”,包括“links.urls
  3. 与“ytlinks/”(文件中)匹配链接.url)并调用“views.ytlinks

但事实上,视图.索引被称为。我哪里做错了?你知道吗

根\网址.py你知道吗

C:\Users\xyron\Desktop\ysynch\ysynch\网址.py你知道吗

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

链接\网址.py你知道吗

C:\Users\xyron\Desktop\ysynch\links目录\网址.py你知道吗

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

Tags: 文件py目录url链接linksurlsusers
3条回答

因为路径被添加到包含中

  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/

Checking "ysynch/urls.py" (my root urls.py file)

Finding "ytlinks/" including "links.urls"

Matching with "ytlinks/" (in file "links.urls") and calling "views.ytlinks"

url中已匹配的部分将被排除在includes中的进一步匹配之外。你知道吗

因此,您基本上尝试再次匹配“ytlinks/”,这对于“ytlinks/ytlinks/”是正确的。您只想在links\urls.py中这样匹配:

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

此文件中的所有URL都已与第一部分“ytlinks/”匹配,您只需与其余部分匹配,其余部分在您的情况下为nothing或^$。你知道吗

你困惑的主要部分是你期待着每一个网址.py尝试匹配整个url,但是您可以将include想象为执行字符串连接,并将url的前一部分与下一部分中的url部分连接起来网址.py你知道吗


当django试图匹配一个url时,它会沿着regex列表向下移动,直到找到一个匹配的正则表达式,因此您可以看到以下内容

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

所以第一个匹配的是第二个url。$在regex中表示一个字符串的结尾,所以这里不必检查它后面的任何内容,这样就可以排除最后两个regex。你知道吗

所以你的计划是三重的

  1. 删除第一个正则表达式所需的链接/URL

    url(r'^ytlinks/', views.ytlinks, name='ytlinks'),
    
  2. 您需要从另一个文件夹的包含url中删除$网址.py你知道吗

    url(r'^', include('links.urls')), 
    
  3. 您需要修改每个链接应该指向的视图,以便最终得到以下结果

    根\网址.py你知道吗

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

    链接\网址.py你知道吗

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

相关问题 更多 >

    热门问题