我正在尝试用 django 搭建一个简单的网站。我已经定义了我的路线,并且它们可以工作,前提是如果我想回家,我必须到 localhost/home/home 而不仅仅是 localhost/home。我的关于页面也是如此。本地主机/主页/关于。如果当我尝试访问 localhost/home 或关于 django 时有任何帮助,则表示找不到该页面。本质上是 404 错误。
这就是姜戈对我吐出的话;
`使用 bbsite.urls 中定义的 URLconf,Django 按以下顺序尝试了这些 URL 模式:
管理员/ 关于/ 家/家/ [名称='家'] 主页/关于/[名称='关于'] 当前路径 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要做的是将
about/
添加到项目bulaboysdotcom/urls.py中的all,这就是为什么你必须输入“ baseurl/about/home”而不是“baseurl/home”。
根 urls.py 中之后的行:
path('lee/', include('bulaboysdotcom.urls')),
永远不会被使用,因为 Django 会找到 first 匹配,即
about
。
解决方案
如果您不想在 bulaboysdotcom/urls.py 中的 url 前面添加某些内容,则不要在这些 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')