问题在 django admin 中扩展 change_form.html

Posted

技术标签:

【中文标题】问题在 django admin 中扩展 change_form.html【英文标题】:Problems extend change_form.html in django admin 【发布时间】:2015-04-30 21:23:45 【问题描述】:

我正在尝试扩展我的一个模型的 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/ 使用参数 '()' 和关键字参数 'u'app_label': ''' 的 'app_list' 反向。尝试了 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))

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

【问题讨论】:

【参考方案1】:

我知道这是迟到的答案,但对于现在像我这样正在为此苦苦挣扎的人来说,这是因为 % for fieldset in adminform % adminform - 是在 change_form 中作为上下文传递的表单.html,但是我目前不知道如何在我的扩展中传递它......感谢任何 cmets。

【讨论】:

【参考方案2】:

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

【讨论】:

朋友您好,感谢您的回复。我在 view.py 中进行了更改。他花了 esso 错误...但后来又出现了另一个错误...请参阅link 我找不到任何关于它的信息。知道这个错误吗? 惊人的@catavaran,这就是问题所在,有必要将一些变量传递给上下文:)但是如果你能帮助我解决最后一个问题......我试着做之后您的回复,我没有成功......我的表单字段没有与我的自定义一起呈现。他们根本没有出现。我需要在上下文中提供更多变量吗?扩展一些 ModelAdmin 的方法? 显示您的视图和模板。 嗨@catavaran,抱歉耽搁了。我在帖子中更新了我的代码。 如果您试图显示完整的更改表单,那么您必须传递更多 (~10) 上下文变量。但我认为这是一种错误的做法。正确的方法是覆盖change_view():docs.djangoproject.com/en/1.7/ref/contrib/admin/…【参考方案3】:

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

通常是由未正确传递的上下文引起的,例如,如果您有一个看起来像 % url 'app_list' %% url 'app_list' var % 的标签,而 var 是空的。

【讨论】:

谢谢你的回答,我的朋友。缺少对上下文 opts 变量的移动。但仍然显示我给@catavaran 的答案中所说的错误。你知道什么是可能的吗?

以上是关于问题在 django admin 中扩展 change_form.html的主要内容,如果未能解决你的问题,请参考以下文章

问题在 django admin 中扩展 change_form.html

在 django admin 中覆盖模板

Django解决扩展用户表时,后台Admin显示密码为明文的问题

Django admin 组件 原理分析与扩展使用 之 sites.py

Django 1.5 扩展 admin/change_form.html 对象工具

如何扩展 django 管理视图?