我怎么能看到当前的urlpatterns“反向”正在寻找?

我在一个视图中调用了逆向,我认为这个论证应该成立,但实际上并不成立。有什么办法能让我知道为什么我的图案没有?


当前回答

django 2.0的极简解决方案

例如,如果你正在寻找installed_apps的第一个应用程序上的url,你可以像这样访问它:

from django.urls import get_resolver
from pprint import pprint

pprint(
    get_resolver().url_patterns[0].url_patterns
)

其他回答

试试这个:

from django.urls import get_resolver
get_resolver().reverse_dict.keys()

或者如果你还在Django 1上。*:

from django.core.urlresolvers import get_resolver
get_resolver(None).reverse_dict.keys()

有一个activestate的配方

import urls

def show_urls(urllist, depth=0):
    for entry in urllist:
        print("  " * depth, entry.regex.pattern)
        if hasattr(entry, 'url_patterns'):
            show_urls(entry.url_patterns, depth + 1)

show_urls(urls.url_patterns)
from django.urls.resolvers import RegexPattern,RoutePattern
from your_main_app import urls

def get_urls():
    url_list = []
    for url in urls.urlpatterns:
        url_list.append(url.pattern._regex) if isinstance(url.pattern, RegexPattern) else url_list.append(url.pattern._route)

    return url_list

这里your_main_app是放置settings.py文件的应用程序名称

def get_resolved_urls(url_patterns):
    url_patterns_resolved = []
    for entry in url_patterns:
        if hasattr(entry, 'url_patterns'):
            url_patterns_resolved += get_resolved_urls(
                entry.url_patterns)
        else:
            url_patterns_resolved.append(entry)
    return url_patterns_resolved

在python中manage.py shell

import urls
get_resolved_urls(urls.urlpatterns)

如果你想要一个项目中所有url的列表,首先你需要安装django-extensions

您可以使用命令简单地安装。

pip install django-extensions

有关包goto django-extensions的更多信息

之后,在settings.py文件中的INSTALLED_APPS中添加django_extensions,如下所示:

INSTALLED_APPS = (
...
'django_extensions',
...
)

urls . py的例子:

from django.urls import path, include
from . import views
from . import health_views

urlpatterns = [
    path('get_url_info', views.get_url_func),
    path('health', health_views.service_health_check),
    path('service-session/status', views.service_session_status)
]

然后,在终端上运行任意命令

python manage.py show_urls

or

./manage.py show_urls

基于config urls.py的输出示例:

/get_url_info             django_app.views.get_url_func
/health                   django_app.health_views.service_health_check
/service-session/status   django_app.views.service_session_status

有关更多信息,您可以查看文档。