2013-08-22 31 views
5

Tôi muốn để có thể sử dụng tra cứu url ngược để liên kết đến một cài đặt trước ví dụ như tên miền:Django URL conf mà không cần một cái nhìn - liên kết đến một miền

trong một mẫu:

<a href="{% url 'admin_site' %}">Admin</a>

đâu trang có thể ngồi tại http://www.mydomain.com/home và site admin có thể http://admin.mydomain.com - hoặc khi ở chế độ dev, nó có thể là http://devadmin.localhost

tôi có thể thiết lập tên miền trong cài đặt sử dụng các biến môi trường - nhưng làm thế nào tôi có thể lấy khung URL để đặt tên miền đó trong mẫu trang?

Hai tuyến đường đơn giản để đạt được điều này:

  1. Chỉ cần tạo một cái nhìn chuyển hướng có thể ngồi ở đâu đó như /go/admin mà chỉ sẽ chuyển hướng đến bất cứ điều gì miền tôi thiết lập.

  2. Bao gồm tên miền của tôi trong mẫu bối cảnh và viết lại một cái gì đó giống như href <a href="{{ ADMIN_SITE }}">

Cả hai tùy chọn sẽ làm việc. Nhưng cả hai đều có nhược điểm: thứ nhất liên quan đến và bước chuyển hướng phụ, bước thứ hai không sử dụng cùng một thẻ url như các liên kết khác.

+0

Phải là được mà không có một cái nhìn? [RedirectView] (https://docs.djangoproject.com/en/1.5/ref/class-based-views/flattened-index/#redirectview) –

Trả lời

2

Tôi không nghĩ bạn có thể/nên thêm trực tiếp các url bên ngoài vào urls.py của mình. Tệp đó dành cho các URL phải được giải quyết từ máy chủ django, vì vậy nếu trang nằm trong máy chủ khác ... và bạn muốn sử dụng {% url %}, nó phải thông qua chuyển hướng.

tôi sẽ làm điều này:

from django.conf.urls import patterns, url 
from django.views.generic import RedirectView 

urlpatterns = patterns('', 
    # ... 

    url(r'^remote_admin/$', RedirectView.as_view(url='http://admin.mydomain.com'), 
     name='remote_admin'), 
    url(r'^dev_admin/$', RedirectView.as_view(url='http://devadmin.localhost'), 
     name='dev_admin'), 
) 

Sau đó {% url %} nên làm việc như bình thường:

{% url 'remote_admin' %} 
Các vấn đề liên quan