提问人:ule mangaa 提问时间:10/20/2023 最后编辑:ule mangaa 更新时间:10/23/2023 访问量:86
为什么 Django 不能正确路由我的 URL?
why is Django not correctly routing my urls?
问:
我正在尝试用 django 建立一个简单的网站。我已经定义了我的路由,并且它们有效,前提是如果我想回家,我必须 localhost/home/home,而不仅仅是 localhost/home。我的关于页面也是如此。localhost/home/about。如果我尝试转到localhost / home或关于django时有任何帮助,则无法找到该页面。本质上是 404 错误。
这就是 Django 向我吐出的东西;
'使用 bbsite.urls 中定义的 URLconf,Django 尝试了这些 URL 模式,顺序如下:
管理/ 大约/ 首页/ Home/ [name='home'] 主页/ 关于我们/ [name='关于'] 目前的路径,home/,与这些都不匹配。
bbsite/urls.py
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('about/', include('bulaboysdotcom.urls')),
path('lee/', include('bulaboysdotcom.urls')),
path('dede/', include('bulaboysdotcom.urls')),
path('contactus/', include('bulaboysdotcom.urls')),
path('home/', include('bulaboysdotcom.urls')),
]
bulaboysdotcom/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('about/', views.about, name="about"),
path('lee/', views.lee, name="lee"),
path('dede/', views.dede, name="dede"),
path('contactus/', views.contact_us, name="call-us"),
path('', views.home, name="index"),
]
bulaboysdotcom/views.py
from django.shortcuts import render
def home(request):
return render(request, 'bulaboysdotcom/index.html')
def about(request):
return render(request, 'bulaboysdotcom/about.html')
def lee(request):
return render(request, 'bulaboysdotcom/lee.html')
def dede(request):
return render(request, 'bulaboysdotcom/dede.html')
def contact_us(request):
return render(request, 'bulaboysdotcom/contactus.html')
bulaboysdotcom/apps.py
from django.apps import AppConfig
class BulaboysdotcomConfig(AppConfig):
default_auto_field = "django.db.models.BigAutoField"
name = "bulaboysdotcom"
bbsite/settings.py (已安装的应用程序部分)
"bulaboysdotcom.apps.BulaboysdotcomConfig",
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
]
答:
你错过了 Django url 如何工作的重点。当你说
path('about/', include('bulaboysdotcom.urls')),
在你的根 bbsite/urls.py 中,你告诉 Django 要做的是将项目中的所有 URL 都添加到 bulaboysdotcom/urls.py 之前,这就是为什么你必须键入“baseurl/about/home”而不是“baseurl/home”。about/
根 urls.py 中那之后的行:
path('lee/', include('bulaboysdotcom.urls')),
永远不会被使用,因为 Django 会找到第一个匹配项,即 .about
溶液
如果您不想在 bulaboysdotcom/urls 中的所有 url 前面加上一些东西.py那么不要在这些 url 的根 urls.py 中包含任何内容:
# bbsite/urls.py
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('bulaboysdotcom.urls')),
]
这应该可以解决您的问题。
其次,为什么不利用 urls.py 中的定义来发挥自己的优势。name
# views.py
from django.shortcuts import render
def home(request):
return render(request, 'index')
def about(request):
return render(request, 'about')
def lee(request):
return render(request, 'lee')
def dede(request):
return render(request, 'dede')
def contact_us(request):
return render(request, 'call-us')
评论