如何在 Django 1.9 中传递可调用对象

Posted

技术标签:

【中文标题】如何在 Django 1.9 中传递可调用对象【英文标题】:How to pass callable in Django 1.9 【发布时间】:2016-03-13 13:27:50 【问题描述】:

您好,我是 Python 和 Django 的新手,我遵循 django workshop 指南。 我刚刚安装了 Python 3.5 和 Django 1.9 并收到了很多错误消息... 刚才我发现了很多文档,但现在卡住了。 我想添加视图,所以我在 urls.py 中添加了以下代码:

from django.conf.urls import include, url

# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()

urlpatterns = [
    # Uncomment the admin/doc line below to enable admin documentation:
    #url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
    url(r'^admin/', include(admin.site.urls)),
    url(r'^rezept/(?P<slug>[-\w]+)/$', 'recipes.views.detail'),
    url(r'^$', 'recipes.views.index'),
]

并且每次都得到错误信息:

Support for string view arguments to url() is deprecated and will be removed in Django 1.10 (got recipes.views.index). Pass the callable instead.
  url(r'^$', 'recipes.views.index'),

但我找不到如何通过它们。文档仅告诉“通过它们”,但没有示例如何...

【问题讨论】:

该指南似乎是为 Django 1.4 编写的。从那以后发生了很多变化,所以你最好寻找一个不同的教程来学习 Django。 嗯,谢谢(= 【参考方案1】:

这是一个弃用警告,这意味着代码现在仍会运行。但要解决这个问题,只需改变

url(r'^$', 'recipes.views.index'),

到这里:

#First of all explicitly import the view
from recipes import views as recipes_views #this is to avoid conflicts with other view imports

在 URL 模式中,

url(r'^rezept/(?P<slug>[-\w]+)/$', recipes_views.detail),
url(r'^$', recipes_views.index),

More documentation and the reasoning can be found here

在现代,我们更新了教程,改为推荐 导入您的视图模块并引用您的视图函数(或 类)直接。这有许多优点,所有这些都源于 我们使用普通 Python 代替“Django String”这一事实 魔术”:错误输入视图名称时的错误不那么晦涩难懂,IDE 可以帮助自动完成视图名称等。

【讨论】:

以上是关于如何在 Django 1.9 中传递可调用对象的主要内容,如果未能解决你的问题,请参考以下文章

Django 错误遵循教程 b/c 使用 3.1 而不是 1.9 TypeError:在 include() 的情况下,视图必须是可调用的或列表/元组 [重复]

如何将 Django 模型字段的默认值设置为函数调用/可调用(例如,相对于模型对象创建时间的日期)

Django 模型字段可调用默认值不起作用

Django——自定义分页(可调用)

数据库连接对象不是 Python Django SQL Alchemy 数据库池引发的可调用异常。为啥?

基于列表显示中的自定义可调用在 Django Admin 中排序