Django 2.0.7 URL app_name 如何工作

Posted

技术标签:

【中文标题】Django 2.0.7 URL app_name 如何工作【英文标题】:Django 2.0.7 how URL app_name works 【发布时间】:2019-03-16 00:48:28 【问题描述】:

我正在开发一个使用 python 3.4.3 和 django 2.0.7 构建的项目,但我被 URL 文件逻辑所困扰。我还没有弄清楚这个错误:“ImportError: No module named 'fields'.

这是我所拥有的:

urls.py

from django.urls import include, path
from django.contrib import admin
from bridge.core import views as core_views

urlpatterns = [
    path('', core_views.home),
    path('backoffice/fields/', include('fields.urls', namespace='backoffice')),
    path('admin/', admin.site.urls),
]

fields/urls.py

from django.urls import path
from . import views

app_name = 'fields'

urlpatterns = [
    path('', views.list_fields, name='list_fields'),
]

“app_name”应该填什么? “app_name”如何工作?

根据那里的文件,当我在浏览器中提交“/backoffice/fields/”时,django 应该调用“views.list_fields”,不是吗?

如果需要任何其他信息来帮助我解决此问题,请告诉我,我会尽快提供。

提前致谢

【问题讨论】:

您是否在settings 的已安装应用中添加了fields 是的,INSTALLED_APPS = [ ..., 'bridge.fields',] 当您在fields.urls 所在的位置创建应用时,您将其称为什么? 好吧,我没有移动任何文件,所以它们现在在我创建应用程序时所在的位置:/urls.py 和 /fields/urls/py 你的项目名称是bridge吗? 【参考方案1】:

app_name 用于在其他位置引用您的urls。您还将看到引用为namespacing。如果您有两个具有相同url name 的不同应用程序,它不会总是选择正确的一个。所以你命名它们并这样调用它们:

% url 'employee:name' %
% url 'customer:name' %

您不仅可以在模板标签中使用名称,例如reverse('employee:name') 等。

您遇到的问题是它不知道在哪里可以找到您的urls 文件。如果您安装的应用是bridge.fields,请尝试使用include(bridge.fields.urls)

要完全找到您的问题,我必须查看您的 project 文件夹结构,了解您的主要 urls 文件在哪里以及您的 fields.urls 在哪里。请记住,fields.urls 实际上是指名为 urls.py 的文件,它位于名为 fields 的文件夹中。

【讨论】:

你成功了!我不知道为什么,但问题是我的include(fields.urls)。我将其更改为include(bridge.fields.urls),现在它工作得很好。可能不知何故找不到文件fields.urls,并且没有正确包含路线。谢谢@CarlBrubaker 这是因为在您安装的应用程序中这样称呼它

以上是关于Django 2.0.7 URL app_name 如何工作的主要内容,如果未能解决你的问题,请参考以下文章

Django学习---博客文章页面的超链接设置

django-常见问题勘误

Django学习之django3.0.3报错:Specifying a namespace in include() without providing an app_name

如何替换重新“。”在 Django 模板 url 标签中

Django 2 命名空间和 app_name

在 include() 中指定命名空间而不提供 app_name ' django.core.exceptions.ImproperlyConfigured