Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Django模板中检查一个或多个回发的正确方法是什么?_Python_Django_Django Templates - Fatal编程技术网

Python 在Django模板中检查一个或多个回发的正确方法是什么?

Python 在Django模板中检查一个或多个回发的正确方法是什么?,python,django,django-templates,Python,Django,Django Templates,首先,检查Django模板中回发的正确方法是: {% if request.POST %} <div id="elementThatShouldBeInTheDOMIfPostBack"> </div> {% endif %} {%if request.POST%} {%endif%} 第二,如果N是第N次回发,即由于验证错误,是否有一种优雅的方法来确定N是什么?通常,在django模板中包含任何逻辑都是不好的做法。django中的模板仅用于表示视图函

首先,检查Django模板中回发的正确方法是:

{% if request.POST %}
    <div id="elementThatShouldBeInTheDOMIfPostBack">
    </div>
{% endif %}
{%if request.POST%}
{%endif%}

第二,如果N是第N次回发,即由于验证错误,是否有一种优雅的方法来确定N是什么?

通常,在django模板中包含任何逻辑都是不好的做法。django中的模板仅用于表示视图函数已计算/处理的内容。您应该在视图功能中执行此操作,例如使用会话:

#----views.py------

from django.shortcuts import render
from forms import MyForm

def someview(request):
    form = MyForm()

    if not 'postbacks' in request.session:
        request.sesson['postbacks'] = {}
    if request.path not in request.sesson['postbacks']:
        request.sesson['postbacks'][request.path] = 1

    if request.method == 'POST':
        form = MyForm(request.POST)

        if not form.is_valid():
            request.sesson['postbacks'][request.path] += 1
        else:
            request.sesson['postbacks'][request.path] = 1


    return render(request,
                  'myapp/tamplate.html',
                  {'form': form, 
                   'postback': request.sesson['postbacks'][request.path]})
然后在模板上使用:

{{ postback }}

干杯!如果你觉得这个答案有帮助的话,别忘了投赞成票;)

通常,在django模板中包含任何逻辑都是不好的做法。django中的模板仅用于表示视图函数已计算/处理的内容。您应该在视图功能中执行此操作,例如使用会话:

#----views.py------

from django.shortcuts import render
from forms import MyForm

def someview(request):
    form = MyForm()

    if not 'postbacks' in request.session:
        request.sesson['postbacks'] = {}
    if request.path not in request.sesson['postbacks']:
        request.sesson['postbacks'][request.path] = 1

    if request.method == 'POST':
        form = MyForm(request.POST)

        if not form.is_valid():
            request.sesson['postbacks'][request.path] += 1
        else:
            request.sesson['postbacks'][request.path] = 1


    return render(request,
                  'myapp/tamplate.html',
                  {'form': form, 
                   'postback': request.sesson['postbacks'][request.path]})
然后在模板上使用:

{{ postback }}

干杯!如果你觉得这个答案有帮助的话,别忘了投赞成票;)

你能解释一下你想完成什么吗?因为模板永远不会知道您是在发布GET方法还是POST方法。问题已编辑。如果是回发,我只想在页面上显示一个元素。然后在
视图.py
中发送一个模板变量以进行检查。您能解释一下您要完成的任务吗?因为模板永远不会知道您是在发布GET方法还是POST方法。问题已编辑。如果元素是回发的,我只希望它出现在页面上。然后在您的
视图.py
中发送一个模板变量以进行检查。我编辑了原始问题。我同意你的逻辑,但我需要模板上的逻辑来控制页面是否包含HTML元素。你是什么意思:“页面是否包含HTML元素”?请参阅原始问题。只有在回发的情况下,该div才应该出现在DOM中,换句话说,是第二次尝试。一旦有了回发上下文变量,您可以这样做:{%if postback>1%}我编辑了原始问题。我同意你的逻辑,但我需要模板上的逻辑来控制页面是否包含HTML元素。你是什么意思:“页面是否包含HTML元素”?请参阅原始问题。只有当它是回发,换句话说,是第二次尝试时,该div才应该出现在DOM中