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