URL-тег, который вы пытаетесь использовать, указан в документации Django здесь (для версии 1.4):
https://docs.djangoproject.com/en/1.3/ref/templates/builtins/#url
Его цель - сохранить URL-адреса в ваших ссылках СУХИМ (не повторять себя), чтобы вам не приходилось менять URL-адреса ссылок между вашим dev, staging, production или любыми другими серверными средами, которые у вас могут быть.
Тег url
принимает представление или ссылку на представление через имя URL в качестве основного аргумента, а любые аргументы, которые представление принимает в качестве второго аргумента. Из документации:
{% url path.to.some_view v1 v2 %}
Где path
- имя пакета, to
- имя модуля, а some_view
- функция просмотра. v1
и v2
- аргументы, которые принимает представление. Это будет выглядеть так в path / to.py:
from django.http import HttpResponse
def some_view(request, v1, v2):
return HttpResponse("A response")
Кроме того, при работе с администратором вам необходимо использовать пространство имен admin
, используя стратегию пространства имен URL, например:
{% url admin:view_name %}
Что вам нужно сделать, это найти путь к нужному представлению и создать URL-адрес, используя этот путь. Для начала вы можете создать ссылку на свой индекс сайта администратора следующим образом:
<a href="{% url admin:index %}">My Admin Site</a>
Это создаст ссылки для выхода администратора, формы смены пароля и списка приложений соответственно:
<a href="{% url admin:logout %}">Admin Logout</a>
<a href="{% url admin:password_change %}">Change Password</a>
<a href="{% url admin:app_list %}">The Application List</a>
Для представлений о конкретных моделях в админке django использует метаданные моделей для построения их имен URL. Вы можете сделать то же самое со своими моделями, чтобы ссылаться на их страницы администратора, однако вам нужно будет создавать их имена программно (если вы их не знаете). Поэтому, если у вас есть модель с именем Foo
, вы можете связать ее с представлением списка изменений, добавить представление и удалить представление в админке соответственно, создав их имена представлений и используя для них метод reverse
:
На ваш взгляд:
from django.core.urlresolvers import reverse
#...some view code...
#Get an instance of the model
bar = Foo.objects.all()[0]
prefix = "%s_%s_" % (Foo._meta.app_label, Foo._meta.module_name)
changelist_name = "%schangelist" % prefix
add_name = "%sadd" % prefix
delete_name = "%sdelete" % prefix
changelist_url = reverse(changelist_name)
add_url = reverse(add_name)
delete_url = reverse(delete_name, args=(bar.pk,)) #You need the id of the model you want to delete as an argument.
#...some more view code...
В вашем шаблоне
<a href="{{ changelist_url }}">The Foo ChangeList</a>
<a href="{{ add_url }}">Add a Foo</a>
<a href="{{ delete_url }}">Delete {{ bar.name }}</a>
Вам, вероятно, придется немного покопаться в кишках django или любого конкретного расширения, которое вы используете, чтобы получить точное имя URL, которое вы хотите. Если вы можете предоставить более подробную информацию о модели, к которой вы пытаетесь получить доступ в админке, я могу дать более конкретный ответ.