【问题标题】:Getting error when I am trying to fetch my main url patterns当我尝试获取我的主要 url 模式时出现错误
【发布时间】:2020-03-19 17:18:22
【问题描述】:

我是 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')),
]

【问题讨论】:

    标签: python django url-pattern


    【解决方案1】:

    您的 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 与可用 url 列表匹配时。

    如果您想在 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 并使无法访问。

    【讨论】:

    • 但是这个 URL 127.0.0.1:8000 不起作用 当我要评论我的另外两个 App 模式时它正在起作用
    • 你能解释一下吗
    • 它会显示默认的 django 页面,当您没有配置 url(管理应用程序除外)并且打开了 DEBUG 时。在这里只是为了向您展示 django 工作正常。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      为了更详细地解释这一点,假设我们的 Django 项目称为 config,我们的两个应用程序称为 app1 和 app2。位于 config/urls.py 的项目级 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/admin。我们还指定了一个主路径,第二个路径为空字符串。这意味着当您导航到http://127.0.0.1:8000/ 时,您将被定向到您的主页(对于上面的示例,我只是使用了一个通用的内置视图)。立即路由到您的管理面板不是一个好主意。

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

          # app1/urls.py
      
          from django.urls import path
          from .views import AppContentView
      
          urlpatterns = [
              path('content/', AppContentView.as_view(), 
                  name='app_content'),
          ]
      

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

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

                        Project Level Url Configs.
                                    |
                                    |                                  
                                    |
                       ___________________________
                       |                          |                              
                       |                          |
                App 1 Url Configs.          App 2 Url Configs.
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-25
        • 1970-01-01
        • 2017-03-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-04
        • 2023-04-08
        相关资源
        最近更新 更多