为什么 Django 不能正确路由我的 URL?

why is Django not correctly routing my urls?

提问人:ule mangaa 提问时间:10/20/2023 最后编辑:ule mangaa 更新时间:10/23/2023 访问量:86

问:

我正在尝试用 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",
]
HTML python-3.x django-views django-urls

评论

0赞 raphael 10/21/2023
您在此处未提供足够的信息来进行故障排除。请至少添加您的根文件和应用 urls.py 文件以及您的 views.py
0赞 Shamim 10/23/2023
我认为您可能正在尝试在浏览器中使用错误的 url,尝试 baseurl/about/about,它应该调用 about.html 并检查模板是否配置正确。
0赞 ule mangaa 10/23/2023
@Shamim当我路由到 baseurl/about/about 时,我会得到关于页面,我也可以执行 baseurl/about/home 并获取主页。我的问题是为什么我必须键入baseurl / about / home,而不是只能键入baseurl / home。我

答:

0赞 raphael 10/23/2023 #1

你错过了 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')