gpt4 book ai didi

python - 测试字符串是否与 django url 和 params 匹配

转载 作者:行者123 更新时间:2023-12-01 04:33:01 24 4
gpt4 key购买 nike

我正在尝试创建一个模板标签,如果 request.path 网址反转为某些命名网址,该模板标签将返回' active'

这是我的模板标签代码

from django import template
from django.core.urlresolvers import reverse
import re

register = template.Library()

@register.simple_tag(takes_context=True)
def menu_main_active(context, urls):
for url in urls.split():
rev = reverse(url) #### PROBLEM IN THIS LINE ####
if rev == context['request'].path or (re.search(rev.replace("/x/", "/?.+/"), context['request'].path) and rev != "/"):
return ' active'
return ''

它需要一个字符串“列表”(用空格分隔),并检查其中是否有一个 URL 的名称与 request.path 中的当前 URL 相反

这就是我的使用方式

{% load menu_item %}
<li class="has-sub{% menu_main_active 'tape-listing tape-list-active tape-list-scratched tape-list-worm tape-detail' %}">

如果指定的 url 没有参数,效果很好。

那么,我如何修改我的模板标签以使用具有参数的网址,例如这个

url(r'^tape/(?P<pk>\w+)/$', views.TapeDetail.as_view(), name='tape-details'),

问题在于该行

rev = reverse(url)

不使用参数,并且无法执行此操作...并抛出此异常:

NoReverseMatch at /qrf/tape/DRA100/ Reverse for 'tape-detail' with arguments '()' and keyword arguments '{}' not found. 2 pattern(s) tried: [u'qrf/api/tapes/(?P[^/.]+)/\.(?P[a-z0-9]+)$', u'qrf/api/tapes/(?P[^/.]+)/$']

所以我正在寻找一种将 url 路径与 url 名称相匹配的方法。

最佳答案

您可以通过评估请求解析器匹配对象来大幅降低复杂性:

request.resolver_match.url_name  # 'tape-details'
request.resolver_match.view_name # 'namespace:tape-details'

解决方案:

@register.simple_tag(takes_context=True)
def menu_main_active(context, urlnames):
if context['request'].resolver_match.url_name in urlnames.split():
return ' active'
else:
return ''

关于python - 测试字符串是否与 django url 和 params 匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32125732/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com