2008-09-06 33 views
7

Tôi có thể in ra một url /admin/manage/products/add của một chế độ xem nhất định trong mẫu không?Django: In url xem mà không cần mã hóa url

Đây là sự cai trị tôi muốn tạo ra một liên kết cho

(r'^manage/products/add/$', create_object, {'model': Product, 'post_save_redirect': ''}), 

Tôi muốn có/quản lý/products/thêm vào một mẫu mà không hardcoding nó. Tôi có thể làm cái này như thế nào?

Edit: Tôi không sử dụng quản trị mặc định (tốt, tôi nhưng nó là tại url khác), đây là của riêng tôi

Trả lời

15

Bạn có thể sử dụng get_absolute_url, nhưng điều đó sẽ chỉ hoạt động đối với một đối tượng cụ thể. Vì đối tượng của bạn chưa được tạo, nó sẽ không hoạt động trong trường hợp này.

Bạn muốn sử dụng named URL patterns. Dưới đây là giới thiệu nhanh:

Thay đổi dòng trong urls.py của bạn để:

(r'^manage/products/add/$', create_object, {'model': Product, 'post_save_redirect': ''}, "create-product"), 

Sau đó, trong mẫu của bạn, bạn sử dụng để hiển thị các URL:

{% url create-product %} 

Nếu bạn sử dụng Django 1.5 hoặc cao hơn bạn cần điều này:

{% url 'create-product' %} 

Bạn có thể làm một số thứ mạnh mẽ hơn với các mẫu URL được đặt tên, y're rất tiện dụng. Lưu ý rằng chúng chỉ có trong phiên bản phát triển (và cũng là 1.0).

+0

Tôi làm cách nào để gọi url trong chế độ xem của mình? Ví dụ, trả về HttpResponseRedirect (...) trong đó ... là giá trị của url tạo sản phẩm – g33kz0r

+1

@Noah xem http://stackoverflow.com/questions/1208802 –

+0

Đừng quên thêm 'name =' vào ' urls.py', giống như vậy: '(r '^ view/$', 'view.function', name = 'hiya')' – smilebomb

2

Nếu bạn sử dụng named url patterns bạn có thể làm follwing trong mẫu của bạn

{% url create_object %} 
0

Cách ưu tiên tạo URL bằng cách thêm phương thức get_absolute_url vào các lớp mô hình của bạn. Bạn có thể mã hóa đường dẫn ở đó để ít nhất bạn cũng gần gũi hơn với triết lý KISS.

Bạn có thể tiếp tục bằng cách sử dụng trình trang trí permalink để tìm đường dẫn dựa trên cấu hình url.

Bạn có thể đọc thêm trong tài liệu django here.