【问题标题】:Django URL and ViewsDjango URL 和视图
【发布时间】:2016-12-27 11:07:15
【问题描述】:

由于以下从视图映射 Django Url 的方法在 Django 1.9 及更高版本中已被弃用

url(r'^contact/$', 'newsletter.views.contact', name='contact'),

url(r'^about/$', 'home.views.about', name='about'),

这就是目前的情况

从时事通讯导入视图'

url(r'^about/$', 'views.about', name='about'),

我如何为 2 个不同的应用视图映射我的网址

从首页导入视图

从时事通讯导入视图

url(r'^home/$', 'views.home', name='home'), #located in home

url(r'^about/$', 'views.about', name='about'), #located in newsletter

像我上面所做的映射会导致错误,所以我需要帮助。 Django 新手

【问题讨论】:

  • 尝试从主页导入视图作为 home_views

标签: django django-views django-urls django-1.9 django-1.10


【解决方案1】:

我不明白你所说的使用完全限定的模块名称是什么意思,因为它是一个核心 python 结构。 但是您可以通过使用“import as”语句将它们绑定到不同的别名来管理包含具有相同名称的子模块的两个不同模块。

例子:

from home import views as home_view
from newsletter import views as news_view

然后,您可以在声明的命名空间中使用别名 home_viewnews_view 来引用每个模块,而不是 views

您可以查看 Python 文档 here 中的 import 语句语法:

如果请求的模块被成功检索,它将被制作 通过以下三种方式之一在本地命名空间中可用:

  • 如果模块名后面跟着as,那么as后面的名字就是 直接绑定到导入的模块。
  • 如果没有指定其他名称, 并且被导入的模块是顶级模块,模块的名称 绑定在本地命名空间中作为对导入模块的引用
  • 如果导入的模块不是顶级模块,则名称 包含该模块的顶级包的绑定在 本地命名空间作为对顶级包的引用。进口的 模块必须使用其完整的限定名而不是 直接

【讨论】:

  • 问题是关于传递一个稍后由 Django 解析的字符串。在较新的版本中,Django 需要一个函数对象,并且不会解析具有函数对象完整路径的字符串。
  • 谢谢。这很有帮助
  • @knbk 是的,我现在明白了。谢谢
【解决方案2】:

试试:

from home import views as home_views

from newsletter import views

url(r'^home/$', 'home_views.home', name='home'), #located in home

url(r'^about/$', 'views.about', name='about'), #located in newsletter

【讨论】:

  • 谢谢。这很有帮助
【解决方案3】:

作为替代方案,您只能导入视图函数:

from home.views import home
from newsletter.views import about

urlpatterns = [
    url(r'^home/$', home, name='home'),
    url(r'^about/$', about, name='about'),
]

【讨论】:

    猜你喜欢
    • 2015-03-29
    • 1970-01-01
    • 1970-01-01
    • 2012-11-18
    • 2019-04-27
    • 2012-12-28
    • 2017-11-11
    • 2015-03-16
    • 1970-01-01
    相关资源
    最近更新 更多