问题在 django admin 中扩展 change_form.html
Problems extend change_form.html in django admin
我正在尝试扩展我的一个模型的 change_form.html 模板以在页面上包含一些信息。我已经阅读了 django 文档
https://docs.djangoproject.com/en/1.6/ref/contrib/admin/#overriding-vs-replacing-an-admin-template
正在发生的问题是:
NoReverseMatch at /contas_pagar/pagamento/2/
Reverse for 'app_list' with arguments '()' and keyword arguments '{u'app_label': ''}' not found. 1 pattern(s) tried: ['(?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))
有人知道怎么解决吗?
更新:
我对代码做了一些修改。
该视图在我的 class 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))
没有出现更多的错误。只是没有显示我的 class 管理员的字段。
这很可能是因为您有一个 {% url %}
标签正试图 link 到 app_list。它可能在您的 admin/form_change.html 或其他 included/extended 模板中。
这 通常 由未正确传递的上下文引起,例如如果您有一个看起来像 {% url 'app_list' %}
或 {% url 'app_list' var %}
的标签和 var
为空。
change_form.html
包含以下 url 标签:
{% url 'admin:app_list' app_label=opts.app_label %}
因此您应该将 opts
变量传递给模板上下文:
data = {'test': 'test',
'opts': MyModel._meta}
UPDATE: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}
我知道这是迟到的答案,但对于那些像我一样现在为此苦苦挣扎的人,这是因为 {% for fieldset in adminform %} adminform - 是一种形式在 change_form.html 中作为上下文传递,但我目前不知道如何在我的扩展中传递它...感谢任何评论。
我正在尝试扩展我的一个模型的 change_form.html 模板以在页面上包含一些信息。我已经阅读了 django 文档 https://docs.djangoproject.com/en/1.6/ref/contrib/admin/#overriding-vs-replacing-an-admin-template
正在发生的问题是:
NoReverseMatch at /contas_pagar/pagamento/2/ Reverse for 'app_list' with arguments '()' and keyword arguments '{u'app_label': ''}' not found. 1 pattern(s) tried: ['(?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))
有人知道怎么解决吗?
更新:
我对代码做了一些修改。
该视图在我的 class 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))
没有出现更多的错误。只是没有显示我的 class 管理员的字段。
这很可能是因为您有一个 {% url %}
标签正试图 link 到 app_list。它可能在您的 admin/form_change.html 或其他 included/extended 模板中。
这 通常 由未正确传递的上下文引起,例如如果您有一个看起来像 {% url 'app_list' %}
或 {% url 'app_list' var %}
的标签和 var
为空。
change_form.html
包含以下 url 标签:
{% url 'admin:app_list' app_label=opts.app_label %}
因此您应该将 opts
变量传递给模板上下文:
data = {'test': 'test',
'opts': MyModel._meta}
UPDATE: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}
我知道这是迟到的答案,但对于那些像我一样现在为此苦苦挣扎的人,这是因为 {% for fieldset in adminform %} adminform - 是一种形式在 change_form.html 中作为上下文传递,但我目前不知道如何在我的扩展中传递它...感谢任何评论。