2012-02-25 32 views
9

Tôi đang phát triển một trang web sử dụng Django làm phụ trợ và tôi muốn cho phép khách hàng thêm các trang mới bằng giao diện quản trị - vì vậy anh ấy nhập tiêu đề trang, bí danh trang được sử dụng cho các url đẹp hơn, và chọn xem liệu anh ấy muốn nội dung tĩnh hay cấu trúc dựa trên bài viết. Cách tiếp cận của tôi như sau: Tôi đã tạo một ứng dụng gọi là sitemanager bao gồm mô hình trang được mô tả ở trên và bộ xử lý ngữ cảnh thêm các trang vào ngữ cảnh mẫu của tôi (cho các menu, v.v.) khỏe.Các url động Django

Tất nhiên, tôi cũng cần móc vào tệp url của mình, nhưng đây là nơi bắt đầu sự cố: Tôi có thể nhờ cấu trúc pythonic của Django, truy xuất mô hình Page trong urls.py và tạo mẫu url của tôi cho phù hợp, và nó không hiển thị, nhưng Django dường như bộ nhớ cache mà tập tin (mà làm cho tinh thần thường), do đó, thay đổi sẽ diễn ra chỉ sau khi khởi động lại máy chủ. Điều này rõ ràng là không thể chấp nhận được. Ý tưởng đầu tiên của tôi sẽ bằng cách nào đó đưa ứng dụng quản trị để đặt lại bộ đệm url nếu các trang mới được thêm vào hoặc xóa hoặc bí danh được sửa đổi (và chỉ sau đó, vì bộ nhớ đệm nói chung là một điều tốt), nhưng tôi không có ý tưởng làm thế nào để bắt đầu ở đó.

Hoặc có thể cũng có một giải pháp đơn giản mà tôi không thấy vào lúc này?

Phần liên quan của urls.py tôi trông cơ bản như thế này:

from sitemanager.models import Page 
static_pages = Page.objects.filter(static=True) 
article_pages = Page.objects.filter(static=False) 
for page in static_pages: 
    pattern = r'^/'+page.alias+'/$' 
    urlpatterns += patterns('', 
     url(pattern, 'views.static_page', 
      { 'active': page } 
     ) 
    ) 
# Pretty much the same for the article pages, 
# but with includes of another app 

Tôi hy vọng tôi đã không làm quá nhiều sai lầm trong khi tước mã mà trong đầu tôi!

Trả lời

13

Bạn có thể sử dụng named groups trong các url để chuyển dữ liệu sang chế độ xem và không yêu cầu bất kỳ cập nhật động nào trong các url. Phần được đặt tên có chứa page.alias sẽ đơn giản được chuyển thành đối số từ khóa cho chức năng xem của bạn. Bạn có thể sử dụng nó để lấy đối tượng Trang thực tế.

# urls.py 
urlpatterns += patterns('', 
    (r'^(?P<page_alias>.+?)/$', 'views.static_page'), 
) 

# views.py 
def static_page(request, page_alias): # page_alias holds the part of the url 
    try: 
     active = Page.objects.get(page_alias=page_alias) 
    except Page.DoesNotExist: 
     raise Http404("Page does not exist") 
2

Bạn không cần URL cụ thể cho từng mục trong toàn bộ cơ sở dữ liệu của mình.

Nếu không thấy chế độ xem của bạn, tôi cho rằng bạn có thể thoát khỏi một URL hoặc có thể là một vài url.

Ví dụ:

#urls.py 
urlpatterns = patterns('yourapp.views', 
url(r'^static_pages/(?P<static_pages_id>\d+)/(?P<True_or_False>\D+)$', your_view_here, name='your_name_here'), 
) 

#views.py 
def your_view_here(request, static_pages_id, True_or_False): 
    obj = get_object_or_404(Page, pk=static_pages_id) 
    if True_or_False: 
     #do something when True 
Các vấn đề liên quan