【问题标题】:Django - trouble handling inclusion_tagDjango - 处理包含标签的问题
【发布时间】:2014-03-05 14:10:44
【问题描述】:

我在理解包含标签的行为时遇到了一些问题。

我有以下相关文件

base.html(基本模板)

<!DOCTYPE html>
<html lang="en">

{% load staticfiles %}
<link rel="stylesheet" type="text/css" href="{% static 'tags/style.css' %}">

{% load my_tags %}

<head>
    <div class="back">
        <h1> Flux </h1>
        <hr>
    </div>
</head>

{% block sidebar %}
{% endblock %}

{% block eventlist %}   
{% endblock %}

{% sidebar %}

</body>
</html>

start.html(目前什么都不做)

{% extends "base.html" %}

views.py

def start(request):
    return render_to_response("tags/start.html",{},
                              context_instance=RequestContext(request))

my_tags.py(我的包含标签,SeeTagForm 只是一个文本字段表单)

@register.inclusion_tag("tags/sidebar.html",takes_context=True)
def sidebar(context):
    seetagform = SeeTagForm()
    return {"seetagform":seetagform}

sidebar.html

<form action="" method="POST">
    {% for error in seetagform.name.errors %}
    <p> {{ error }} </p>
    {% endfor %}
    {% csrf_token %}
    <button class="btn" type="submit" name="seetag">See</button>
    {{ seetagform.name }}
</form>

现在我有一些疑问:

1 - 由于我的标签中有takes_context=Truecontext 参数有哪些成员?

2 - 更具体地说,我如何处理来自/通过我的标签的提交,也就是说,我可以在sidebar(context) 中执行request = context["request"],以便我可以检查,例如,输入是否正确?

3 - 要执行上述任何操作,我是否必须在 setting.py 中添加任何内容?

4 - 是否可以(并且是良好的做法)处理包含标签中的表单,或者我应该使用另一种视图来做到这一点?如果有,怎么做?

提前致谢,

【问题讨论】:

标签: python html django django-templates


【解决方案1】:

上下文将包含外部上下文所具有的所有元素。 如果您安装了“django.core.context_processors.request”上下文处理器,您的上下文将包含请求。 TEMPLATE_CONTEXT_PROCESSORS默认不安装此处理器。

一般来说,我认为在包含标签中处理表单是个坏主意。 很难想象这种情况会带来什么好处

在基于类的视图中,您将有一个单独的 post 方法来处理表单提交。 在视图函数上,您可以在单独的函数中单独处理表单或内联处理它。

通常希望在提交有效表单后将用户重定向回相同的 url 以摆脱 POST 数据。这不适用于包含标签。

在某些地方,例如类基视图,django 使用 TemplateResponse 而不是 HttpResponse 作为视图的返回。 TemplateResponse 是尚未呈现的模板。它在处理中间件后被渲染。一个中间件可以 通过替换它来忽略原始响应。这样一来,原始模板将永远不会被渲染,这意味着包含标签中的表单永远不会被验证。

【讨论】:

    猜你喜欢
    • 2012-07-05
    • 2011-10-06
    • 2012-08-20
    • 2017-04-06
    • 1970-01-01
    • 2012-12-22
    • 2014-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多