当我尝试获取主网址格式时出现错误

时间:2019-11-24 03:51:35

标签: python django url-pattern

我是Django的初学者,我创建了一个Django项目,当我在两个应用程序中都添加了urls.py文件时,我都添加了两个应用程序,两个应用程序都运行良好,但是当我获取主管理员URL时,错误

Page not found (404)
Request Method: GET
URL:    http://127.0.0.1:8000/
the URLconf defined in mac.urls, Django tried these URL patterns, in this order:

admin/
shop/
blog/
The empty path didn't match any of these.

You're seeing this error because you have DEBUG = True in your Django settings file. Change that to 
 False, and Django will display a standard 404 page.

当我在http://127.0.0.1:8000/中获取此URL时,我收到一条错误消息,称它适用于http://127.0.0.1:8000/shop/

这是我的主要urls.py

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
path('admin/', admin.site.urls),
path('shop/', include('shop.urls')),
path('blog/', include('blog.urls')),
]

3 个答案:

答案 0 :(得分:2)

您的django应用有3条路线:
http://127.0.0.1:8000/admin/进入Django admin应用
http://127.0.0.1:8000/shop/转到您的shop应用
http://127.0.0.1:8000/blog/转到您的blog应用

而且由于您没有http://127.0.0.1:8000的配置,因此会看到错误。
当django尝试将您的网址与可用网址列表匹配时,您会在错误中看到这一点。

如果要获取URL http://127.0.0.1:8000上的管理应用,请将urls.py更改为:

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
path('', admin.site.urls),
path('shop/', include('shop.urls')),
path('blog/', include('blog.urls')),
]

通常不建议将管理应用程序设置为根URL,因为它内部有自己的URL系统(admin/<app_name>/<model_name>),因此很可能会遮盖您的URL并使其无法访问。

答案 1 :(得分:2)

创建一个将成为您的首页的视图。 从那里您应该链接到网站的其他区域。 不要把它引向管理员,这太荒谬了。

答案 2 :(得分:0)

您已经创建了一个 Django 项目并启动了两个应用程序。您应该有一个项目级 urls.py 文件,然后是每个应用的应用级 urls.py 文件。

为了更详细地解释这一点,假设我们的 Django 项目名为 config,我们的两个应用程序名为 app1 和 app2。您的项目级 urls.py 文件将位于 config/urls.py,可能包含以下内容:

5CS12

在这个文件中,我们为我们的管理面板指定了一个路由,它在您的本地服务器上将位于 http://127.0.0.1:8000/admin。我们还指定了一条回家路线,第二条路径为空字符串。这意味着当您导航到 http://127.0.0.1:8000/ 时,您将被定向到您的主页(对于上面的示例,我只使用了一个通用的内置视图)。立即路由到您的管理面板不是一个好主意。

我们还包含了其他两个应用的路径。这两行基本上说的是:“包括来自其他应用程序的网址”。现在我们需要创建两个 urls.py 文件,每个应用一个。在这个例子中,我将只关注 app1 的 urls.py 文件:

    # config/urls.py

    from django.contrib import admin
    from django.urls import path, include
    from django.views.generic.base import TemplateView

    urlpatterns = [
        path('admin/', admin.site.urls),
        path('', TemplateView.as_view(template_name='home.html'),
            name='home'),
        path('app1/', include('app1.urls')),
        path('app2/', include('app2.urls')),
    ]

这是您必须创建的视图,但我们现在所做的是创建了一个位于 http://127.0.0.1:8000/app1/content 的路径。事实上,我们在这个文件中创建的任何新路径总是以 http://127.0.0.1:8000/app1/ 开头,因为我们已经在我们的项目级 urls.py 中告诉 Django 包含来自 app1 urls.py 文件的 url,所以我们已经基本上以 /app1/ 为所有这些路径的前缀。

如果您将 urls 配置视为一棵树,它可能也会有所帮助:

    # app1/urls.py

    from django.urls import path
    from .views import AppContentView

    urlpatterns = [
        path('content/', AppContentView.as_view(), 
            name='app_content'),
    ]
相关问题