我只想到达索引之外的另一个目录。
我输入“localhost:8000/ysynch/
”之后我认为Django正在做什么:
ysynch/urls.py
”(我的根urls.py文件)ytlinks/
”,包括“links.urls
”ytlinks/
”匹配(在文件“links.urls”中)并调用“views.ytlinks
”但是,调用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'),
]
答案 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!)
所以匹配的第一个将是你网址的第二个。正则表达式中的$
表示字符串的结尾,因此它不会在此处检查其后面的任何内容,因此您可以排除最后两个正则表达式。
所以你的修复是三重的,
您需要删除第一个正则表达式的链接/网址
url(r'^ytlinks/', views.ytlinks, name='ytlinks'),
您需要从其他urls.py
中删除包含网址中的$url(r'^', include('links.urls')),
您需要修改每个链接应该转到的视图,以便最终得到以下结果
根\ 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'),
]