【问题标题】:How to pass a variable from template to views in django?如何将变量从模板传递到django中的视图?
【发布时间】:2021-07-17 09:50:22
【问题描述】:

index.html

{% if request.session.visitor_language == 'en'  %}
                                
   {% with current_page=request.resolver_match.url_name %} 
       {{current_page}}    
   {% endwith %}

   My name is  Khan <a style="color: blue;" href="{% url 'change_language' %}?current_page={{current_page}}">BN</a>
{% endif %}

这里我试图通过urlscurrent_page 的值发送给视图

urls.py

path('home/change_lang/$', views.change_visitor_language, name='change_language'), 

views.py

def change_visitor_language(request,current_page):
    print(current_page)

我从屏幕得到的错误

/home/change_lang/$ 处的类型错误

我在命令行中遇到的错误

TypeError:change_visitor_language() 缺少 1 个必需的位置参数:'current_page'

【问题讨论】:

  • 如果您将值从屏幕发送到 Views.py,我建议您通过 FORM 发送它并通过 POST 方法获取它。对于您的场景,您可以直接从视图中生成 ( request.resolver_match.url_name ) 值,而不是从模板发送它...
  • 我知道....但在我看来,它会更改页面。当它在模板中时,它有一个页面。我需要这个页面。因此,在更改页面之前,我需要将页面传递给视图,以便我将重定向回上一页....

标签: html django view jinja2


【解决方案1】:

由于您将current_page 作为query param 发送,因此不会将其作为方法参数添加到视图中。

您可以像这样在视图中访问它:

def change_visitor_language(request):
    current_page = request.GET.get('current_page')

另外,像这样更改您的HTML

{% if request.session.visitor_language == 'en'  %}
                                
   {% with current_page=request.resolver_match.url_name %} 
       {{current_page}}    
       My name is  Khan <a style="color: blue;" href="{% url 'change_language' %}?current_page={{current_page}}">BN</a>
   {% endwith %}

{% endif %}

【讨论】:

  • vai.....当像这样改变视图时它返回空字符串。
  • 尝试打印request.GET。我的假设是它会有一个键 current_page 但它会有一个空值。我已经更新了我的答案以适应这些变化。
猜你喜欢
  • 2021-10-15
  • 1970-01-01
  • 2015-05-23
  • 1970-01-01
  • 1970-01-01
  • 2020-08-09
  • 1970-01-01
  • 2015-02-02
  • 1970-01-01
相关资源
最近更新 更多