Django - 处理inclus_tag的麻烦

时间:2014-03-04 23:34:37

标签: python html django django-templates

我在理解包含标签的行为方面遇到了一些麻烦。

我有以下相关文件

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 - 更具体地说,我如何处理来自/通过我的标记的提交,也就是说,我可以在request = context["request"]sidebar(context)进行处理,以便我可以检查,例如,输入是否是正确的吗?

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

4 - 是否可以(和良好做法)处理包含标记中的表单,或者我应该使用另一个视图来执行此操作?如果是这样,怎么样?

提前致谢,

1 个答案:

答案 0 :(得分:0)

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

一般来说,我认为处理包含标记中的表单是个坏主意。 不容易想象这有利的情况

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

通常需要在提交有效表单后将用户重定向回相同的URL以删除POST数据。这不会包含在包含标记中。

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