Django 1.0 이전에는 객체의 관리자 URL을 얻는 쉬운 방법이 있었고 다음과 같이 사용할 작은 필터를 작성했습니다. <a href="{{ object|admin_url }}" .... > ... </a>
기본적으로보기 이름이있는 URL 반전 기능을 사용하고있었습니다. 'django.contrib.admin.views.main.change_stage'
reverse( 'django.contrib.admin.views.main.change_stage', args=[app_label, model_name, object_id] )
URL을 얻으려면.
짐작할 수 있듯이 최신 버전의 Django로 업데이트하려고하는데 이것이 내가 겪었던 장애물 중 하나입니다. 관리자 URL을 얻는 방법이 더 이상 작동하지 않습니다.
django 1.0에서 어떻게 할 수 있습니까? (또는 svn의 최신 버전으로 업데이트하려고 할 때 1.1).
답변
나는 전화를 걸려 reverse('admin_index')
고 끊임없이 django.core.urlresolvers.NoReverseMatch
오류 가 발생 하는 비슷한 문제가있었습니다 .
내 urls.py 파일에 이전 형식의 관리자 URL이있는 것으로 나타났습니다.
나는 이것을 urlpatterns에 가지고 있었다 :
(r'^admin/(.*)', admin.site.root),
관리자 화면은 작동하지만 사용되지 않는 방법입니다. 나는 이것을 이것을 바꿔야했다.
(r'^admin/', include(admin.site.urls) ),
일단 그렇게하면 리버스 관리 URL 문서 에서 약속 된 모든 장점이 작동하기 시작했습니다.
답변
URL 리졸버를 템플릿에서 직접 사용할 수 있으므로 직접 필터를 작성할 필요가 없습니다. 예 :
{% url 'admin:index' %}
{% url 'admin:polls_choice_add' %}
{% url 'admin:polls_choice_change' choice.id %}
{% url 'admin:polls_choice_changelist' %}
참조 : 문서
답변
from django.core.urlresolvers import reverse
def url_to_edit_object(obj):
url = reverse('admin:%s_%s_change' % (obj._meta.app_label, obj._meta.model_name), args=[obj.id] )
return u'<a href="%s">Edit %s</a>' % (url, obj.__unicode__())
이것은 admin의 기본 애플리케이션 네임 스페이스 인 admin : url namespaces를 사용한다는 점을 제외하고 hansen_j의 솔루션과 유사 합니다.
답변
1.10 과 같은 이후 버전에는 다른 방법이 있습니다 .
{% load admin_urls %}
<a href="{% url opts|admin_urlname:'add' %}">Add user</a>
<a href="{% url opts|admin_urlname:'delete' user.pk %}">Delete this user</a>
또는 opts
같은 곳 은 어디입니까mymodelinstance._meta
MyModelClass._meta
한 가지 단점은 장고 템플릿 (예 :)에서 밑줄 속성에 직접 액세스 할 수 없으므로 뷰에서 템플릿 컨텍스트로 객체 {{ myinstance._meta }}
를 전달해야한다는 opts
것입니다.
답변
본질적으로 Mike Ramirez의 답변과 동일하지만 장고 표준 get_absolute_url
방법 에 비해 스타일이 간단하고 가깝습니다 .
def get_admin_url(self):
return reverse('admin:%s_%s_change' % (self._meta.app_label, self._meta.model_name),
args=[self.id])
답변
1.1 장고 이전의 경우 간단합니다 (기본 관리 사이트 인스턴스의 경우).
reverse('admin_%s_%s_change' % (app_label, model_name), args=(object_id,))
답변
1.0을 사용하는 경우 다음과 같은 사용자 정의 템플리트 태그를 작성하십시오.
def adminpageurl(object, link=None):
if link is None:
link = object
return "<a href=\"/admin/%s/%s/%d\">%s</a>" % (
instance._meta.app_label,
instance._meta.module_name,
instance.id,
link,
)
그런 다음 템플릿에서 {% adminpageurl my_object %}를 사용하십시오 (템플릿 태그를 먼저로드하는 것을 잊지 마십시오)