测试字符串是否与Django url和params匹配

2024-05-14 15:35:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图创建一个templatetag,如果request.path的url反向为某些命名的url,则返回' active'。在

这是我的templatetag代码

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相反

我就是这么用的

^{pr2}$

如果指定的url没有参数,它的工作效果很好。在

那么,如何修改templatetag来处理具有参数的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名称。在


Tags: pathdjangofromimporturl参数requestcontext

热门问题