Я пытаюсь расширить шаблон change_form.html одной из моих моделей, чтобы включить на страницу некоторую информацию. Я прочитал документацию django в https: // docs. djangoproject.com/en/1.6/ref/contrib/admin/#overriding-vs-replacing-an-admin-template
Проблема в том, что происходит:
NoReverseMatch в / contas_pagar / pagamento / 2 / Обратный для 'app_list' с аргументами '()' и аргументами ключевого слова '{u'app_label': ''} 'не найден. Пробовали 1 шаблон (ы): ['(? P \ w +) / $']
Я использую Django 1.6.5 с Django-Suit 0.2.12
Изображение ошибки: https://dl.dropboxusercontent.com/u/80415688/error_app_django.PNG
Через my_project/my_app/templates/admin/my_app/my_model/change_form.html
{% extends "admin/change_form.html" %}
Через my_project/urls.py
urlpatterns = patterns('',
url(r'^contas_pagar/pagamento/(?P<id_parcela>\d+)/$',
'contas_pagar.views.retorna_pagamentos_parcela'),
# django urls
url(r'^doc/', include('django.contrib.admindocs.urls')),
url(r'', include(admin.site.urls)),)
Через my_project/views.py
def return_id(request, id):
data = { 'test': 'test', }
return render_to_response('admin/my_app/my_model/change_form.html', data,
context_instance=RequestContext(request))
Кто-нибудь знает как решить?
ОБНОВЛЕНИЕ:
Я внес некоторые изменения в код.
Представление находится в моем классе ModelAdmin.
В my_project / my_app / templates / admin / my_app / my_model / change_form.html:
{% extends "admin/change_form.html" %}
{% block after_field_sets %}{{ block.super }}
<h2>{{ test }}</h2>
{% endblock %}
В my_project / my_app / admin.py:
class PagamentoAdmin(admin.ModelAdmin):
form = PagamentoForm
model = Pagamento
list_display = ('id', 'parcelas_contas_pagar', 'data', 'valor')
def get_urls(self):
urls = super(PagamentoAdmin, self).get_urls()
my_urls = patterns('',
(r'(?P<id_parcela>\d+)/$', self.admin_site.admin_view(self.retorna_pagamentos_parcela)),
)
return my_urls + urls
def retorna_pagamentos_parcela(self, request, id_parcela):
data = {
'test': test,
'opts': self.model._meta,
'app_label': self.model._meta.app_label,
'change': True,
'add': False,
'is_popup': False,
'save_as': False,
'has_delete_permission': False,
'has_add_permission': False,
'has_change_permission': True
}
return render_to_response('admin/contas_pagar/pagamento/change_form.html', data, context_instance=RequestContext(request))
Больше ошибок не появляется. Просто не отображаются поля моего класса Admin.
3 ответа
change_form.html
содержит следующий тег URL:
{% url 'admin:app_list' app_label=opts.app_label %}
Поэтому вам следует передать переменную opts
в контекст шаблона:
data = {'test': 'test',
'opts': MyModel._meta}
ОБНОВЛЕНИЕ : в шаблоне change_form.html
используется тег шаблона {% submit_row %}
, который требует некоторых других переменных контекста, поэтому словарь data
должен быть таким:
data = {'test': 'test',
'opts': MyModel._meta,
'change': True,
'is_popup': False,
'save_as': False,
'has_delete_permission': False,
'has_add_permission': False,
'has_change_permission': False}
Я знаю, что это поздний ответ, но для тех, кто сейчас борется с этим, как и я, это из-за {% для fieldset в adminform %} adminform - это форма, переданная как контекст в change_form.html, однако в настоящее время я не знаю, как передать это в мое расширение ... Примите во внимание любые комментарии.
Скорее всего, это вызвано тем, что у вас есть тег {% url %}
, который пытается установить ссылку на app_list. Это может быть ваш admin / form_change.html или другой включенный / расширенный шаблон.
Это обычно вызвано некорректной передачей контекста, например, если у вас есть тег, который выглядит как {% url 'app_list' %}
или {% url 'app_list' var %}
, а var
пуст.
Похожие вопросы
Новые вопросы
django
Django - это серверная платформа веб-приложений с открытым исходным кодом, написанная на Python. Он разработан для сокращения усилий, необходимых для создания сложных веб-сайтов и веб-приложений, управляемых данными, с особым упором на меньшее количество кода, отсутствие избыточности и более явное, чем неявное.