【问题标题】:Comparing request.path to a string in Django template将 request.path 与 Django 模板中的字符串进行比较
【发布时间】:2019-07-27 20:44:02
【问题描述】:

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

【问题讨论】:

  • 您不能只在标签内使用变量语法。
  • 刚试了一下,还是不行。这仍然返回错误:{% if request.path == "/values|lower/" %}
  • 是的,这将把路径与文字字符串“/values|lower/”进行比较。
  • 是的,我想,但我尝试过的其他方法只会导致错误。有没有办法添加正斜杠?

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


【解决方案1】:

想出一种方法来消除 request.path 中的斜线:request.path|cut:'/' 现在,如果与 values|lower 相比,它会返回 true。如果有人有更好的解决方案,我会很高兴听到它。

【讨论】:

    【解决方案2】:

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

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

    别忘了重启你的服务器。

    【讨论】:

    • 过滤器无效:'to_str'
    猜你喜欢
    • 2012-05-03
    • 1970-01-01
    • 2012-06-06
    • 2016-03-03
    • 1970-01-01
    • 2023-03-03
    • 2016-02-12
    • 2020-04-15
    • 1970-01-01
    相关资源
    最近更新 更多