我正在使用自定义 templatetag
@register.inclusion_tag('parts/sidebar.html', takes_context = True)
def show_sidebar(context):
districts = models.Apartment.objects.order_by().values_list('district', flat=True).distinct()
return {
'districts': districts
}
在 sidebar.html 中,它获取区域并通过{%url%}标记传递它们,并将区域参数传递给views.district
sidebar.html
{% load aptAPI_tags %}
<ul>
{% for district in districts %}
<li>
<a href="{% url 'district' district %}">
{{ district }}
</a>
</li>
{% endfor %}
</ul>
views.py
def district(request, district):
try:
apartments = Apartment.objects.filter(district=district).all()
except Apartment.DoesNotExist:
raise Http404("District does not exist")
return render(request, 'district.html', {'apartments': apartments})
urls.py
url(r'^dist=(?P<district>[0-9A-Za-z._%+-]+)', views.district, name='district'),
它对于地区的“Eixample”运作得很好,但它不适用于非Ascii字符为“Horta-Guinardó”或“Sant Andreu”的区域,因为字符串在第一个非Ascii字符上分裂,我需要它们稍后过滤数据库。 请问有什么想法?有帮助吗? 谢谢
答案 0 :(得分:1)
您的正则表达式[0-9A-Za-z._%+-]+
与非ascii字符不匹配。您必须使用\w
。 URL调度程序将为已编译的正则表达式设置re.UNICODE
标志,这将匹配任何字母数字的unicode字符。
您还希望将$
添加到正则表达式的末尾以匹配行尾。
url(r'^dist=(?P<district>[\w\.%+-]+)/$', views.district, name='district'),