【发布时间】:2015-11-14 12:54:01
【问题描述】:
我正在尝试创建一个模板标签,如果 request.path url 反转为某些命名的 url,则返回 ' 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,比如这个
url(r'^tape/(?P<pk>\w+)/$', views.TapeDetail.as_view(), name='tape-details'),
问题在于这条线
rev = reverse(url)
不使用params,做不到……并抛出这个异常:
NoReverseMatch 在 /qrf/tape/DRA100/ 未找到带有参数“()”和关键字参数“{}”的“磁带详细信息”的反向。尝试了 2 种模式:[u'qrf/api/tapes/(?P[^/.]+)/\.(?P[a-z0-9]+)$', u'qrf/api/磁带/(?P[^/.]+)/$']
所以我正在寻找一种将 url 路径与 url 名称匹配的方法。
【问题讨论】:
-
你能发布一个来自
urls.split()的样本url -
['tape-listing', 'tape-list-active', 'tape-list-scratched', 'tape-list-worm', 'tape-detail']
标签: python django django-templates django-views django-urls