首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django -处理inclusion_tag的问题

Django -处理inclusion_tag的问题
EN

Stack Overflow用户
提问于 2014-03-05 07:34:37
回答 1查看 149关注 0票数 0

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

我有以下相关文件

base.html (基本模板)

代码语言:javascript
复制
<!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 (目前什么也不做)

代码语言:javascript
复制
{% extends "base.html" %}

views.py

代码语言:javascript
复制
def start(request):
    return render_to_response("tags/start.html",{},
                              context_instance=RequestContext(request))

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

代码语言:javascript
复制
@register.inclusion_tag("tags/sidebar.html",takes_context=True)
def sidebar(context):
    seetagform = SeeTagForm()
    return {"seetagform":seetagform}

sidebar.html

代码语言:javascript
复制
<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=True,那么context参数有哪些成员?

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

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

4-是否可以(也是很好的实践)在包含标记中处理表单,或者我是否应该使用另一个视图来实现?如果是这样的话,是怎么做的?

提前谢谢你,

EN

回答 1

Stack Overflow用户

发布于 2014-03-05 14:10:45

该上下文将具有外部上下文所具有的所有元素。如果您已经安装了"django.core.context_processors.request“上下文处理器,那么您的上下文将包含请求。默认情况下,TEMPLATE_CONTEXT_PROCESSORS中不安装此处理器。

一般来说,我认为在包含标签中处理表单不是一个好主意。很难想象这样做会有什么好处。

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

通常期望在有效的表单提交之后将用户重定向回相同的url以去除POST数据。如果没有包含标记,这是行不通的。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22185474

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档