我试图创建一个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名称。在
通过评估请求解析器匹配对象,可以大大降低复杂性:
解决方案:
^{pr2}$相关问题 更多 >
编程相关推荐