2008-09-04 35 views
24

Trong ngôn ngữ mẫu của Django, bạn có thể sử dụng {% url [viewname] [args] %} để tạo URL cho một chế độ xem cụ thể với thông số. Làm thế nào bạn có thể lập trình làm như vậy trong mã Python?Cách tạo url trong django

Điều tôi cần là tạo danh sách các mục menu trong đó mỗi mục có tên, URL và cờ hoạt động (cho dù đó là trang hiện tại hay không). Điều này là bởi vì nó sẽ sạch hơn rất nhiều để làm điều này trong Python hơn ngôn ngữ mẫu.

Trả lời

34

Nếu bạn cần sử dụng thứ gì đó tương tự như thẻ mẫu {% url %} trong mã của bạn, Django cung cấp django.core.urlresolvers.reverse(). Chức năng reverse có chữ ký sau đây:

reverse(viewname, urlconf=None, args=None, kwargs=None) 

https://docs.djangoproject.com/en/dev/ref/urlresolvers/

8

Tôi đang sử dụng hai cách tiếp cận khác nhau trong models.py tôi. Đầu tiên là permalink trang trí:

from django.db.models import permalink 

def get_absolute_url(self): 
    """Construct the absolute URL for this Item.""" 
    return ('project.app.views.view_name', [str(self.id)]) 
get_absolute_url = permalink(get_absolute_url) 

Bạn cũng có thể gọi reverse trực tiếp:

from django.core.urlresolvers import reverse 

def get_absolute_url(self): 
    """Construct the absolute URL for this Item.""" 
    return reverse('project.app.views.view_name', None, [str(self.id)]) 
+0

Điều này có giống với sử dụng trang trí không? @ models.permalink –

4

Hãy nhận biết rằng việc sử dụng reverse() đòi hỏi rằng mô-đun URLconf của bạn là 100% lỗi miễn phí và có thể được xử lý - IOW không ViewDoesNotExist lỗi hoặc như vậy, hoặc bạn nhận được sự sợ hãi NoReverseMatch ngoại lệ (lỗi trong mẫu thường không âm thầm dẫn đến None).