2011-02-04 42 views
11

Tôi đang sử dụng Django 1.2.4 trên Ubuntu 10.10. Tôi đang cố gắng ghi đè lên mẫu index.html cho mô-đun quản trị. Tôi đã theo dõi các số instructions này. Tôi cũng đã xem số này question, nhưng tôi vẫn gặp khó khăn.Khó khăn ghi đè mẫu Django Admin

Các hướng dẫn nói để tạo ra một thư mục admin trong thư mục templates:

templates/ 
    admin/ 
     index.html 

Tôi muốn ghi đè lên một khối duy nhất trong index.html. (Thực sự, tất cả tôi muốn làm là thêm một số văn bản đến cuối cùng Có một cách dễ dàng hơn so với sao chép/dán toàn bộ khối và thay đổi nó.?) (Cập nhật: Hình như {{block.super}} có thể giúp đỡ.)

Để tín hiệu rằng tôi trọng, tôi đặt này ở đầu index.html tôi:

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

Tất nhiên, đó là kết quả trong một stack overflow (từ nhà ga):

Exception RuntimeError: 'maximum recursion depth exceeded in __subclasscheck__' in <type 'exceptions.RuntimeError'> ignored 

là gì đúng cách để làm điều này? Tôi đã thử một liên kết tượng trưng cho mỗi câu trả lời cho câu hỏi được liên kết, nhưng điều đó dẫn đến những điều sau:

[email protected]:~/foo$ sudo ln -s /usr/local/lib/python2.6/dist-packages/django/contrib/admin/templates/ django_admin 
[sudo] password for me: 
ln: creating symbolic link `django_admin': Protocol error 

Tôi làm gì sai?

Trả lời

1

Không chắc chắn nếu bạn tìm thấy câu trả lời, nhưng bạn cần phải thay đổi

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

để

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

như đó là những gì trang index.html gốc ghi đè. Bởi vì hệ thống Django tìm kiếm thư mục mẫu của bạn trước khi sử dụng một admin mặc định, vì vậy trong trường hợp này nó tìm thấy admin/index.html trong các mẫu của bạn, sau đó nó đang cố gắng mở rộng chính nó với phần mở rộng (do đó lỗi đệ quy).

Để tham khảo, bạn cũng có thể tùy chỉnh base_site.html trong các mẫu của mình, nó mở rộng base.html. Điều tốt nhất để làm là sao chép bản gốc từ:

/usr/local/lib/python2.6/dist-packages/django/contrib/admin/templates/ 

và dán nó vào thư mục template của bạn như là một điểm khởi đầu

13

Lỗi đệ quy là bởi vì bạn đang mở rộng admin/index.html với chính nó.

Bạn có thể:

  • sao chép toàn bộ admin/index.html mẫu trong thư mục templates/admin/ của bạn, và nó sẽ thay thế các mẫu mặc định với bạn
  • ghi đè các index.html cho mỗi ứng dụng hoặc mô hình, như được giải thích here

Tôi biết điều này là muộn sau câu hỏi, nhưng bạn biết đấy, google đang di chuyển ...

7

Sửa đổi cài đặt.py với thêm một mẫu thư mục, ví dụ:

TEMPLATE_DIRS = (
    # Put strings here, like "/home/html/django_templates". 
    # Always use forward slashes, even on Windows. 
    # Don't forget to use absolute paths, not relative paths. 
    "/home/mysite/webapps/django/myproject/templates", 
    "/home/mysite/webapps/django/lib/python2.7/django/", # extra folder 
) 

Sau đó, trong myproject/templates/admin thêm index.html riêng của bạn như:

{% extends "contrib/admin/templates/admin/index.html" %} 

{% block branding %} 
    <h1 id="site-name">Administration for TheLittleButtonCo</h1> 
{% endblock %} 

Biến thể là có thể, rõ ràng. Điều này hoạt động trên Django 1.3.1 cuối cùng

+0

Giải pháp làm sạch! –

+0

làm thế nào để bạn chỉ định một đường dẫn đến cài đặt jdango mà không cần mã hóa nó? – maazza

+1

@maazza: 'nhập django; os.path.dirname (django .__ file __) ' – utapyngo

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