【问题标题】:Django urlpatterns issueDjango urlpatterns 问题
【发布时间】:2020-08-27 16:25:25
【问题描述】:

我正在学习 Eric Matthes 的 Python 速成课程。这本书适用于 Python 2.0,我正在尝试将其本质上转换为适用于 Python 3.0。我遇到了包含()的问题。我在命令提示符下收到的错误是:

django.core.exceptions.ImproperlyConfigured:将 3 元组传递给 不支持包含()。传递一个包含列表的 2 元组 模式和 app_name,并为 include() 提供命名空间参数 而是。

这是我的代码:

from django.conf.urls import include, url
from django.contrib import admin


urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'', include('learning_logs.urls', namespace='learning_logs')),
]

【问题讨论】:

  • 不,问题不在于管理员的包含。问题在于 include('learning_logs.urls', namespace='learning_logs')
  • 我是PCC的作者。您正在使用本书第一版的旧版本;第一版后来的印刷版不再使用url() 函数,而是使用了更新的path() 函数。还有许多其他变化也很难分类。我强烈建议你从本书的第二版开始学习这个项目,或者找到一个不同的 Django 特定资源来学习。
  • 谢谢。我的计划是仍然遵循本章的内容,但从 django 文档而不是书中的示例构建代码,但我会查看第二版。

标签: python django django-urls


【解决方案1】:

首先,当你提问时,你应该总是提到你的 Django 版本。 根据您的代码,这是旧的做事方式。如果我没记错的话,从 Django 2 开始,你必须以不同的方式来做这件事。

有两种方法可以解决。

第一种方式: 将您的代码更改为:

from django.conf.urls import include, url
from django.contrib import admin
    learning_logs_patterns = ([
         url(...),
    ], 'learning_logs')  
    
    urlpatterns = [
        url(r'^admin/', include(admin.site.urls)),
        url(r'^polls/', include(learning_logs_patterns, namespace='learning_logs')),
    ]

第二种方式:

在 mysite.urls.py 中

from django.conf.urls import include, url
from django.contrib import admin


urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'', include('learning_logs.urls')),
]

在 learning_logs.urls.py 中

app_name = 'polls'  
urlpatterns = [...]

有关详细信息,请参阅文档:https://docs.djangoproject.com/en/3.1/releases/1.9/#passing-a-3-tuple-or-an-app-name-to-include

一个小建议:从 Django 2 开始,有一个更好的方法来声明 url。它被称为 path()。详情见文档:https://docs.djangoproject.com/en/3.1/ref/urls/

【讨论】:

  • 感谢您的详细回复。我正在使用 Django 3.1。我猜这意味着我正在使用的这本书使用的是旧版本。我将尝试实施您的更改。
  • [...] 是什么意思?你是说按字面意思输入这个还是填充词?目前我在 learning_log.urls 中的代码是: urlpatterns = [ url(r'^$', views.index, name='index'), ]
  • 那是填充物。
  • 我无法让任何一个工作。第一个选项会生成一个新错误。 url() 缺少 1 个必需的位置参数:'view'。我认为这可能是因为我在 learning_logs_patterns (..) 中输入的内容。我目前有这样的类型。 learning_logs_patterns = ([ url('learning_logs.urls'), ], 'learning_logs')
猜你喜欢
  • 2012-09-08
  • 2020-05-29
  • 2011-05-08
  • 2021-07-27
  • 1970-01-01
  • 2012-04-13
  • 2016-07-17
  • 2013-07-16
相关资源
最近更新 更多