【问题标题】:Blog in Django 1.11 Mapping URLs to ViewsDjango 1.11 中的博客将 URL 映射到视图
【发布时间】:2019-01-24 16:12:15
【问题描述】:

我是 Django (1.11) 和 Python(2.7) 的新手。我正在尝试创建一个博客。我在将 URL 映射到视图时遇到问题。 我的myblog\posts\views.py

from __future__ import unicode_literals
from django.shortcuts import render

from django.http import HttpResponse

# Create your views here.


def post_home(request):
   return HttpResponse("<h1>Hello</h1")

我的myblog\myblog\urls.py

from django.conf.urls import url
from django.contrib import admin
from posts import views

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^posts/$', posts_view.post_home),
]

我的myblog\myblog\settings.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'posts',
]

TypeERROR: view 在 include() 的情况下必须是可调用的或列表/元组

任何帮助将不胜感激!

【问题讨论】:

  • 请仔细检查您复制粘贴的代码是否正确。您得到的错误对示例代码没有意义。
  • @Antwane 可能取决于 Django 的版本。我按照 Django 1.9 的教程,没有错误,但是我有 Django 1.11。
  • @Antwane 我再次检查了它。我有相同的代码。你怎么看,还有什么可能是这种错误的原因?
  • @Antwane 当我在myblog\myblog\urls.py 中评论字符串url(r'^posts/$', posts_view.post_home), 时一切正常。
  • 错误应该是NameError: name 'posts_view' is not defined。在您的情况下,您有一个错误指示 posts_view.post_home 不是函数。这表明模块“posts_view”引用了一些东西。不幸的是,在您发布的代码中,posts_view 没有引用任何内容。请编辑您的问题并添加定义或导入 posts_view 的代码

标签: python django python-2.7 blogs django-1.11


【解决方案1】:

您发布的代码中存在一些问题:

from posts import views

urlpatterns = [
    url(r'^posts/$', posts_view.post_home),
    #                ^^^^^^^^^^
    #                what does this variable refer to ?
]

您使用语句from posts import views 导入了模块(又名:python 文件)posts.views,因此您必须以这种方式引用post_home 函数:

urlpatterns = [
    # [...]
    url(r'^posts/$', views.post_home),
]

这应该可以解决您的问题

注意:有很多方法可以引用你的视图函数:

示例 1

import posts.views
urlpatterns = [
    # [...]
    url(r'^posts/$', posts.views.post_home),
]

示例 2

from posts.views import post_home
urlpatterns = [
    # [...]
    url(r'^posts/$', post_home),
]

【讨论】:

  • 我尝试了这两个示例,但不幸的是它没有解决问题。
  • @nameless 这是否意味着你得到同样的错误?
【解决方案2】:

将您的导入更改为:

from posts.views import post_home

和你的网址:

url(r'^posts/$', post_home),

【讨论】:

  • 我改了,但没有解决问题。我仍然有同样的错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-22
  • 1970-01-01
  • 2011-07-21
  • 2015-09-01
  • 2017-12-23
相关资源
最近更新 更多