Django 2.2:正则表达式 url 匹配

Django 2.2: regex url match

我需要创建一个我的中间件应该忽略的 url 列表。

我需要忽略 /admin/ 和它后面的任何 url。

我该如何继续?

如果 "any URL that comes after it" 是指像“/admin/my_app/my_model/...”这样的 URL,那么您可以只使用 .startswith():

if not request.path.startswith('/admin/'):
    # do things

相反,如果您想忽略 urls.py/admin/ 之后列出的 URL,您可以遍历默认解析器的 url_patterns 并在您点击时停止/admin/ 在任何其他模式匹配之前。 请注意,仅仅因为这似乎是可能的并不意味着这是一个好主意 ;)

下面是一些 可能 有效的代码,但它很可能不会涵盖任何边缘情况:

from django.urls.exceptions import Resolver404
from django.urls.resolvers import get_resolver

def pattern_after_admin(request):
    """
    Returns True if the request URL matches a pattern listed
    after the `/admin/` pattern or no pattern at all.
    """
    resolver = get_resolver()
    after_admin = False
    for pattern in resolver.url_patterns:
        try:
            pattern.resolve(request.path)
        except Resolver404:
            try:
                pattern.resolve('/admin/')
            except Resolver404:
                pass
            else:
                after_admin = True
                break
        else:
            break
    return after_admin