2015-02-28 15 views
5

Tôi đang cố gắng mở rộng mẫu change_form.html của một trong các mô hình của tôi để bao gồm một số thông tin trên trang. Tôi đã đọc các tài liệu hướng dẫn django trong https://docs.djangoproject.com/en/1.6/ref/contrib/admin/#overriding-vs-replacing-an-admin-templateSự cố mở rộng change_form.html trong django admin

Vấn đề là rằng đang xảy ra:

NoReverseMatch tại/contas_pagar/pagamento/2/ Xếp cho 'app_list' với các đối số '()' và từ khóa không tìm thấy đối số '{u'app_label': ''} '. 1 mẫu (s) thử: [ '(? P \ w +)/$']

Tôi đang sử dụng Django 1.6.5 với Django-Suit 0.2.12

Hình ảnh lỗi: https://dl.dropboxusercontent.com/u/80415688/error_app_django.PNG

trong my_project/my_app/templates/admin/my_app/my_model/change_form.html

{% extends "admin/change_form.html" %} 

trong 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)),) 

trong 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)) 

Có ai có bất kỳ ý tưởng làm thế nào để giải quyết?


UPDATE:
tôi thực hiện một số thay đổi đối với mã.
Chế độ xem nằm trong lớp ModelAdmin của tôi.

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

trong 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)) 

Không xuất hiện nhiều lỗi. Chỉ cần không hiển thị các trường của lớp Admin của tôi.

Trả lời

9

change_form.html chứa các thẻ sau url:

{% url 'admin:app_list' app_label=opts.app_label %} 

Vì vậy, bạn phải vượt qua biến opts vào mẫu bối cảnh:

data = {'test': 'test', 
     'opts': MyModel._meta} 

CẬP NHẬT: Mẫu change_form.html sử dụng {% submit_row %} mẫu thẻ mà yêu cầu một số biến ngữ cảnh khác để từ điển data phải như sau:

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} 
+0

Xin chào bạn, cảm ơn phản hồi của bạn. Tôi đã thực hiện thay đổi trong chế độ xem của tôi Ông đã bỏ lỗi tiểu luận ... Nhưng sau đó đã xảy ra lỗi khác ... xem [link] (https://dl.dropboxusercontent.com/u/80415688/error_change_django.PNG) Tôi không thể tìm thấy bất kỳ điều gì về nó. Bất kỳ ý tưởng nào về lỗi này? –

+0

Tuyệt vời @catavaran, Đó là vấn đề, cần phải vượt qua một số biến có nhiều bối cảnh :) Nhưng nếu bạn có thể giúp tôi với một câu hỏi cuối cùng ... Tôi đã cố gắng làm sau câu trả lời của bạn và tôi đã không thành công ... Các trường của biểu mẫu của tôi không được hiển thị cùng với tùy chỉnh của tôi. Họ chỉ đơn giản là không xuất hiện. Tôi cần cung cấp thêm một số biến trong ngữ cảnh? mở rộng một số phương thức của ModelAdmin? –

+0

Hiển thị chế độ xem và mẫu của bạn. – catavaran

2

Điều này rất có thể do bạn có thẻ {% url %} đang cố gắng liên kết với app_list. Nó có thể nằm trong admin/form_change.html của bạn hoặc trong một số mẫu được bao gồm/mở rộng khác.

Đây là thường do bối cảnh đó không được truyền một cách chính xác như nếu bạn có một thẻ giống như {% url 'app_list' %} hoặc {% url 'app_list' var %}var trống.

+0

Cảm ơn câu trả lời, bạn tôi. Không di chuyển đến biến opts bối cảnh. Nhưng vẫn hiển thị lỗi được nêu trong câu trả lời tôi đã gửi cho @catavaran. Bạn có ý tưởng gì không? –