python - 将 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>
解决方案
您最好使用自定义模板标签。
- 在您的应用程序中创建
templatetags
具有相同级别的文件夹views.py
- 放入
__init__.py
包含空白内容的文件夹 - 创建新文件,例如。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)
- 打开你的 HTML 模板
- 添加
{% load my_extras %}
到模板顶部 - 现在比较字符串的路径。做类似的事情
{% if request.path|to_str==<another_string_to_comparre> %}
Do your stuff here
{% endif %}
不要忘记重新启动服务器。
推荐阅读
- python - 新添加的列在数据框中不起作用
- c# - 过滤类属性并创建一个新类(.cs 文件)
- scala - 在 spark scala 中重命名列的子名称 s"${col.name}.*"
- javascript - Vue - 导入没有导出的 npm 包
- html - CSS 日文文本不在 span 中居中
- mysql - 如何让我的选择始终使用当前周?
- javascript - 使用 Javascript,你可以在一秒钟内计数 += 1 多少次?
- manim - 突然 manim 不跑了
- xml - XSLT for-each 匹配问题
- javascript - 如何从 JSON 文件获取属性到 EJS 文件?