问题扩展了django admin中的change_form.html

时间:2015-02-28 02:19:22

标签: django templates django-admin customization

我尝试扩展其中一个模型的change_form.html模板,以在页面中包含一些信息。我已经阅读了django文档 https://docs.djangoproject.com/en/1.6/ref/contrib/admin/#overriding-vs-replacing-an-admin-template

问题出现了:

  

/ contas_pagar / pagamento / 2 /的NoReverseMatch   反向' 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))

没有出现更多错误。只是没有显示我的班级管理员的字段。

3 个答案:

答案 0 :(得分:20)

change_form.html包含以下网址标记:

{% 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}

答案 1 :(得分:2)

这很可能是因为您有一个{% url %}标记正在尝试链接到app_list。它可以在您的admin / form_change.html或其他一些包含/扩展模板中。

通常由未正确传递的上下文引起,例如,如果您的标记看起来像{% url 'app_list' %}{% url 'app_list' var %}var是空。

答案 2 :(得分:0)

我知道答案很晚,但是对于像我这样现在正在挣扎的人来说,这是因为{%表示 adminform %} adminform中的字段-是在change_form中作为上下文传递的一种形式.html,但是我目前不知道如何在扩展名中传递它。感谢任何评论。