2011-04-17 79 views
27

Tôi đã tạo chế độ xem tùy chỉnh.Chế độ xem tùy chỉnh Django vào trang quản trị

Tôi làm cách nào để chèn chế độ xem vào quản trị viên?

Đối với một lớp quản trị bình thường, chúng ta có thể chỉ đơn giản là đăng ký nó cho site admin:

class ListAdmin(admin.ModelAdmin): 
    ... 

admin.site.register(List, ListAdmin) 

Tôi cố gắng để ghi đè GET_URL trong admin.py, question_list là quan điểm:

class ListAdmin(admin.ModelAdmin): 
    def list_view(self, request): 
     return question_list(request) 

    def get_urls(self): 
     urls = super(ListAdmin, self).get_urls() 
     list_urls = patterns('', r'^list/$', self.list_view()) 

     return list_urls + urls 

admin.site.register(question_list, ListAdmin) 

Đây là chế độ xem câu hỏi:

def question_list(request): 
    #questions = Question.objects.filter(topic__icontains = 1) 
    questions = Question.objects.all() 
    return render_to_response('admin/question_list.html', {'questions':questions}) 
question_list = staff_member_required(question_list) 

Tôi nhận được đối tượng 'chức năng' không phải là tôi lỗi có thể xảy ra.

Cảm ơn.

+0

Bạn có thể vui lòng cụ thể hơn không? – arie

+0

Tôi chỉ muốn thêm chế độ xem tùy chỉnh vào quản trị viên trang web. Tôi đã tạo chế độ xem trong views.py. Làm thế nào tôi có thể thêm nó vào admin trong admin.py? – kelvin

+0

Chế độ xem làm gì? Bạn có thể phân lớp ModelAdmin của bạn để lọc queryset, vv Nhưng thông thường bạn sẽ làm cho khung nhìn custon của bạn với mẫu riêng của nó trong giao diện người dùng. – arie

Trả lời

18

Dựa trên những thông tin mà bạn cung cấp bạn nên kiểm tra phần này của tài liệu hướng dẫn của Django:

Adding views to admin sites (lưu ý: liên kết có giá trị trong phiên bản 1.5 kể từ phiên bản 1.3 không được hỗ trợ nữa - các giải pháp vẫn còn hiệu lực).

Sau đó, bạn có thể kiểm tra this blog post và điều này question để biết thêm một số cảm hứng và chi tiết khác.


Dựa trên ví dụ của bạn tôi thực sự không hiểu tại sao bạn chỉ cần không sử dụng thường xuyên ModelAdmin với một số filtering options:

class QuestionAdmin(admin.ModelAdmin): 
    list_filter = ('topic',) 
+4

Liên kết tới bài đăng trên blog đã chết. –

+0

Không, nó không chết. –

+1

Vâng, đúng thế. "Không thể thu thập dữ liệu hoặc hiển thị trang do robots.txt". – Cerin

0

Bạn nên ghi đè get_urls trong bạn ModelAdmin lớp con.

5

Các mô hình được một cái nhìn, không phải là kết quả của cách gọi xem, ví dụ:

list_urls = patterns('', r'^list/$', self.list_view()) 

nên

list_urls = patterns('', r'^list/$', self.list_view) 

Ngoài ra, "list_view" (ở giai đoạn này) là một cái nhìn như bất kỳ khác. Vì vậy, nó sẽ cần trả về một đối tượng HttpResponse.

def list_view(self, request): 
    return question_list(request) 

Bạn không hiển thị mã cho question_list() nhưng tôi nghi ngờ nó không trả lại một HttpResponse.

P.S .: Nếu bạn cung cấp truy nguyên của đối tượng "chức năng" không thể lặp lại "ngoại lệ (bạn sẽ nhận được điều này khi truy cập" danh sách/"?) Sẽ có ít phỏng đoán hơn.

3

Dưới đây là một ví dụ về tất cả mọi thứ cần thiết để thêm (như của Django 1.6) cho một trang tùy chỉnh sẽ được liên kết đến từ một nút bên cạnh nút "History" ở phía trên bên phải của trang chi tiết của đối tượng:

https://gist.github.com/mattlong/4b64212e096766e058b7

+0

trang này hiện không có sẵn bây giờ – user168983

+0

mẫu tuples hiện là các danh sách cũ đơn giản cũng là change_form.html {% block.super%} phải là {{block.super}} –

Các vấn đề liên quan