【问题标题】:Cannot locate view in Django MVC在 Django MVC 中找不到视图
【发布时间】:2013-09-11 11:09:49
【问题描述】:

我正在尝试开始一个简单的项目来显示一些 HTML。但是,当我运行我的代码时,我似乎无法找到 html 文件。我正在关注 Django 网站上的教程所说的内容

"在您刚刚创建的模板目录中,创建另一个名为 polls 的目录,并在其中创建一个名为 index.html 的文件。换句话说,您的模板应该位于 polls/templates/polls/index.html。因为关于 app_directories 模板加载器的工作原理,您可以在 Django 中将这个模板简单地称为 polls/index.html。”

所以我将 index.html 放入

    homepage/templates/homepage/index.html

我还没有在我的 models.py 中添加任何东西

项目 urls.py:

    from django.conf.urls import include, url, patterns

    urlpatterns = patterns('',
        url(r'homepage/',include('homepage.urls', namespace = "homepage")),
    )

应用 urls.py

    from django.conf.urls import patterns, url
    from homepage import views

    urlpatterns = patterns('',
        url(r'^$', views.index, name = 'index'),
    )

views.py:

    from django.http import HttpResponse
    from django.template import RequestContext, loader

    def index(request):
        template = loader.get_template('homepage/index.html')
        return HttpResponse(template)
    )

******更新** **********

所以通过一些修补,我似乎能够获取 HTML 文件。但是,此 HTML 文件的显示行为不正确。例如,如果我有这个位:

    <!DOCTYPE html>
    <html>
    <body>

    <form>
    First name: <input type="text" name="firstname"><br>
    Last name: <input type="text" name="lastname">
    </form>

    </body>
    </html>

输出将是一个空白页。页面源将显示:

    <Text Node: '<!DOCTYPE html>
    <html>
    <b'>

不知道为什么会这样。是否与我安装了 django-pipeline 以及 twitter 引导程序有关?

【问题讨论】:

  • 您的TEMPLATE_LOADERS 设置是什么?
  • @kroolik omg .. 完全忘记了编辑这些内容...对不起,我已经很久了。发布解决方案!我很乐意接受它作为答案!
  • @kroolik 实际上我的 TEMPLATE_LOADERS 设置为默认 TEMPLATE_LOADERS = ( 'django.template.loaders.filesystem.Loader', 'django.template.loaders.app_directories.Loader', # 'django.template. loaders.eggs.Loader',我的页面现在运行但是它没有打印正确的输出=[
  • 不要返回HttpResponse,内容是模板对象(带有它的节点),尝试renderdjango.http.shortcuts 中的render_to_response。模板的字符串表示不是呈现的内容(这是通过.render()方法完成的)。
  • @kroolik 谢谢!这行得通!我做了什么 --> pastebin.com/UKWxw2Bd 但是,我不明白您所说的“模板的字符串表示不是渲染的内容(这是通过 .render() 方法完成的)”是什么意思,如果您不介意,您能解释一下吗通俗地说,这对我来说。谢谢!

标签: python html django django-templates django-views


【解决方案1】:

问题在于return HttpResponse(template)HttpResponse 接受 content 作为它的第一个参数。内容可以是任何具有字符串表示形式的内容(实现__str____unicode__,取决于将Content-Encoding 标头传递给响应并且它是字符集)或者是可迭代的。在后一种情况下,它产生的所有元素都必须用字符串表示。

您遇到的问题是您将Template 对象传递给响应,这是可迭代(实现__iter__ 方法)。迭代模板会产生所有已编译的节点。节点本身实现__repr__,当__str__ 缺失时使用。而HttpResponse,如果content 是可迭代的,则返回所有通过迭代可迭代产生的元素。

你可以模拟这个:

from django.http import HttpResponse
from django.template import RequestContext, loader

def index(request):
    template = loader.get_template('homepage/index.html')
    for n in template:
        print n
    return HttpResponse(template)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-05
    • 2016-07-15
    • 2011-07-01
    • 1970-01-01
    • 2019-04-27
    • 2013-12-14
    • 1970-01-01
    相关资源
    最近更新 更多