首页 > 解决方案 > 将 request.path 与 Django 模板中的字符串进行比较

问题描述

我一直在使用 Django,遇到了这个问题,当它们都是相同的字符串时,下面标记的 if 中的比较返回 false。如果 request.path 是 /test/ 那么 "/{{values|lower}}/" 也是 /test/ 但它们不相等。为什么会这样?

<form class="btn-group btn-group-sm btn-group-toggle btn-block" action="" method="POST">
    {% for i in name %}
        {% csrf_token %}
        {{ form.as_p }}

        <input {% cycle name.0 name.1 name.2 name.3 name.4 as values %}
            // HERE
            {% if press == values or request.path == "/{{values|lower}}/" %} 
                class="btn btn-outline-dark btn-block m-2 active" 
            {% else %} 
                class="btn btn-outline-dark btn-block m-2" 
            {% endif %}
        type="Submit" name="{{values}}" value="{{values}}"/>

        // THESE TWO LINES PRINT THE STRINGS ON PAGE
        {{request.path}}
        /{{values|lower}}/

    {% endfor %}
</form>

标签: pythondjangopython-3.xdjango-templates

解决方案


您最好使用自定义模板标签。

  1. 在您的应用程序中创建templatetags具有相同级别的文件夹views.py
  2. 放入__init__.py包含空白内容的文件夹
  3. 创建新文件,例如。my_extras.py
#my_extras.py
from django import template
register = template.Library()
@register.filter(name='to_str')
def to_str(value):
    return str(value)
  1. 打开你的 HTML 模板
  2. 添加{% load my_extras %}到模板顶部
  3. 现在比较字符串的路径。做类似的事情
{% if request.path|to_str==<another_string_to_comparre> %}
Do your stuff here
{% endif %}

不要忘记重新启动服务器。


推荐阅读