Django的url
模板标签如何工作?它有什么魔力可以用来“扭转”正则表达式?
你给它一个像这样的正则表达式:
urlpatterns = [
# ex: /polls/5/
url(r'^(?P<question_id>[0-9]+)/$', views.detail, name='detail'),
]
...然后在您的模板中,您可以生成与此模式匹配的网址:
<a href="{% url 'detail' question.id %}">{{ question.question_text }}</a>
这是如何工作的?通常,正则表达式用于解析文本,而不是生成。 re
模块中是否有提供此功能的内置工具?
我的问题不是关于如何使用Django,或者如何使用Regex解析文本。相反,我有兴趣学习如何在其他地方以这种“字符串模板”方式使用正则表达式。
答案 0 :(得分:3)
反转正则表达式的关键是normalize()
函数,它接受正则表达式并返回可能性列表。每种可能性都是占位符字符串和参数列表的元组。
reverse()
函数首先检查参数是否与占位符的参数列表匹配。如果匹配,则使用传递给reverse()
的参数(使用简单的'string' % parameters
)格式化占位符字符串。然后将此字符串与原始正则表达式进行匹配。这是必要的,因为占位符字符串的参数没有任何限制,因此检查原始正则表达式可确保例如\d+
的组只包含数字。
如果使用传递的参数格式化的字符串与原始正则表达式匹配,则它是有效的URL,并返回。