[python] 완전한 Django URL 구성 결정
완전한 장고 URL 구성 을 얻는 방법이 있습니까?
예를 들어 Django의 디버깅 404 페이지에는 포함 된 URL 구성이 표시되지 않으므로 이것은 완전한 구성이 아닙니다.
답변 : Alasdair 덕분에 다음은 예제 스크립트입니다.
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.urlpatterns)
답변
Django는 Python이므로 내성은 당신의 친구입니다.
셸에서 urls
. 을 반복 urls.urlpatterns
하고 포함 된 URL 구성의 가능한 한 많은 레이어를 드릴 다운하여 완전한 URL 구성을 구축 할 수 있습니다.
import urls
urls.urlpatterns
목록 urls.urlpatterns
에는 RegexURLPattern
및 RegexURLResolver
개체 가 포함 됩니다.
A의 RegexURLPattern
객체 p
당신과 함께 정규 표현식을 표시 할 수 있습니다
p.regex.pattern
A의 RegexURLResolver
객체 q
는 포함 된 URL 구성을 나타냅니다, 당신은 정규 표현식과의 첫 부분을 표시 할 수 있습니다
q.regex.pattern
그런 다음
q.url_patterns
추가 RegexURLResolver
및 RegexURLPattern
객체 목록을 반환 합니다.
답변
Django 확장은 manage.py 명령으로이를 수행하는 유틸리티를 제공합니다.
pip install django-extensions
그런 다음 django_extensions
INSTALLED_APPS에 settings.py
. 그런 다음 콘솔에서 다음을 입력하십시오.
python manage.py show_urls
답변
“me too”답변을 추가 할 위험을 감수하면서 프로젝트의 모든 URL을 다소 예쁘고 알파벳순으로 정렬 한보기와 그들이 호출하는보기를 제공하는 위에서 제출 한 스크립트의 수정 된 버전을 게시하고 있습니다. 프로덕션 페이지보다 개발자 도구에 가깝습니다.
def all_urls_view(request):
from your_site.urls import urlpatterns #this import should be inside the function to avoid an import loop
nice_urls = get_urls(urlpatterns) #build the list of urls recursively and then sort it alphabetically
return render(request, "yourapp/links.html", {"links":nice_urls})
def get_urls(raw_urls, nice_urls=[], urlbase=''):
'''Recursively builds a list of all the urls in the current project and the name of their associated view'''
from operator import itemgetter
for entry in raw_urls:
fullurl = (urlbase + entry.regex.pattern).replace('^','')
if entry.callback: #if it points to a view
viewname = entry.callback.func_name
nice_urls.append({"pattern": fullurl,
"location": viewname})
else: #if it points to another urlconf, recur!
get_urls(entry.url_patterns, nice_urls, fullurl)
nice_urls = sorted(nice_urls, key=itemgetter('pattern')) #sort alphabetically
return nice_urls
및 템플릿 :
<ul>
{% for link in links %}
<li>
{{link.pattern}} ----- {{link.location}}
</li>
{% endfor%}
</ul>
정말 멋지게 만들고 싶다면 변수를 뷰로 전달하는 정규식에 대한 입력 상자가있는 목록을 렌더링 할 수 있습니다 (다시 프로덕션 페이지가 아닌 개발자 도구로).
답변
이 질문은 조금 오래되었지만 동일한 문제가 발생하여 해결책에 대해 논의 할 것이라고 생각했습니다. 주어진 Django 프로젝트는 분명히 모든 URL에 대해 알 수있는 수단이 필요하며 몇 가지 작업을 수행 할 수 있어야합니다.
- URL에서지도->보기
- 명명 된 url-> url의지도 (1은보기를 가져 오는 데 사용됨)
- 보기 이름-> url에서지도 (보기를 가져 오는 데 1이 사용됨)
Django는 주로 RegexURLResolver
.
- RegexURLResolver.resolve (URL에서 매핑->보기)
- RegexURLResolver.reverse
다음과 같은 방법으로 이러한 개체 중 하나를 손에 넣을 수 있습니다.
from my_proj import urls
from django.core.urlresolvers import get_resolver
resolver = get_resolver(urls)
그런 다음 다음과 같은 방법으로 URL을 간단히 인쇄 할 수 있습니다.
for view, regexes in resolver.reverse_dict.iteritems():
print "%s: %s" % (view, regexes)
즉, Alasdair의 솔루션은이 방법보다 더 멋지게 인쇄하기 때문에 완벽하고 몇 가지 장점이 있습니다. 그러나 RegexURLResolver
객체 에 대해 알고 손을 뻗는 것은 특히 Django 내부에 관심이 있다면 알아두면 좋은 것입니다.
답변
이 기능을 모든 Django 프로젝트에 추가하는 패키지 (django-showurls)를 제출했습니다. 이는 manage.py와 잘 통합되는 간단한 새 관리 명령입니다.
$ python manage.py showurls
^admin/
^$
^login/$
^logout/$
.. etc ..
pip를 통해 설치할 수 있습니다.
pip install django-showurls
그런 다음 Django 프로젝트 settings.py 파일에서 설치된 앱에 추가합니다.
INSTALLED_APPS = [
..
'django_showurls',
..
]
그리고 당신은 갈 준비가되었습니다.
여기에 더 많은 정보-https:
//github.com/Niklas9/django-showurls
답변
등록 된 URL의 전체 목록을 얻는 가장 쉬운 방법은 contrib.admindocs 를 설치 한 다음 “보기”섹션을 확인하는 것입니다. 설정이 매우 쉬우 며 모든 템플릿 태그, 모델 등에 대해 완전히 찾아 볼 수있는 문서를 제공합니다.
답변
DEBUG 모드에 표시된대로 평가되거나 평가되지 않은 URL을 찾고 있습니까? 평가를 위해 django.contrib.sitemaps가 도움이 될 수 있습니다. 그렇지 않으면 Django의 코드로 리버스 엔지니어링이 포함될 수 있습니다.