Django:如何区分来自同一页面的不同页面的发帖请求?

问题描述 投票:0回答:3

我有两个页面都包含表单。但是,两个页面都将发布请求发送到同一页面。如何区分哪个页面发送了请求。

dummy.html(第一页)

<form action="/nda" method='POST'>
        {% csrf_token %}
        <button type="submit" name="submit" id="submit" value="I Agree"  target="_blank">I Agree</button>

        <button onclick="window.open('/greeting')" target="_blank"> I Disagree </button></br>
</form>

此页面重定向到nda页面。

nda.html(第二页)

此页面还会重定向到同一页面。

<form action="/nda"  method='POST'>
        {% csrf_token %}
    <button type="submit" name="submit" id="submit" value="I Agree" target="_self">I Agree</button>
    <button onclick="window.open('/greeting')" target="_self"> I Disagree </button></br>
</form>

我的问题是,我如何区分页面虚拟页面是来自哪个页面还是虚拟页面是同一页面。

views.py

def nda(request):
    if request.method=='POST' :
        # if this is from dummy I want to do this
        return render(request,'mainapp/nda.html',{'user':email.split('@')[0]})

    if request.method=='POST' :
        # if this is from same page that is nda I want to do this
        return render(request,'mainapp/home.html')

我不知道如何处理这两种情况

python django post django-views http-post
3个回答
1
投票

如果我正确理解了您的问题,则可以在提交按钮中使用name属性

<button type="submit" name="submit1" id="submit" value="I Agree"  target="_blank">I Agree</button

<button type="submit" name="submit2" id="submit" value="I Agree"  target="_blank">I Agree</button

在视图中

def nda(request):
    if request.method=='POST' and 'submit1' in request.POST :
        # do something
        return render(request,'mainapp/nda.html',{'user':email.split('@')[0]})

    elif request.method=='POST' and 'submit2' in request.POST:
        #do something else
        ...

0
投票

nda.html]中的表单未指定method='POST',因此从此表单调用的请求将默认使用GET

您可以通过在views.py

中捕获request.method=='GET'来处理它
def nda(request):
    if request.method=='GET' :
        # if this is from dummy I want to do this
        return render(request,'mainapp/nda.html',{'user':email.split('@')[0]})
...

如何运作?您单击提交按钮,服务器正在访问..类型为commit的按钮遵循表单标签中指定的“操作”路径也就是说,为了请求不同的页面,您需要创建一个附加的url,视图和html

示例:

one_html.html

{%csrf_token%}我同意我不同意

urls.py:

...url(r'^'+ app_name +'some_path',views_one,name ='name1'),

views.py:

def views_one(request):如果request.method =='POST':#做某事

示例:

two_html.html

{%csrf_token%}我同意我不同意

urls.py:

...url(r'^'+ app_name +'some_path',views_two,name ='name2'),

views.py:

def views_two(request):如果request.method =='POST':#做某事

不同之处在于操作指向不同的URL,因此将被称为不同的视图


0
投票

如何运作?您单击提交按钮,服务器正在访问..类型为commit的按钮遵循表单标签中指定的“操作”路径也就是说,为了请求不同的页面,您需要创建一个附加的url,视图和html

© www.soinside.com 2019 - 2024. All rights reserved.