将request.path与Django模板中的字符串进行比较

时间:2019-07-27 20:44:02

标签: python django python-3.x django-templates

我一直在和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>

2 个答案:

答案 0 :(得分:0)

找出一种使用以下方法摆脱request.path中的斜杠的方法:request.path|cut:'/'现在,如果与values | lower相比较,它将返回true。如果有人有更好的解决方案,我会很乐意听到。

答案 1 :(得分:0)

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

  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 %}

别忘了重新启动服务器。