Có cách nào để lấy URL trang hiện tại và tất cả các tham số của nó trong mẫu Django không?Django: lấy URL của trang hiện tại, bao gồm các thông số, trong một mẫu
Ví dụ, một templatetag đó sẽ in một URL đầy đủ như /foo/bar?param=1&baz=2
Có cách nào để lấy URL trang hiện tại và tất cả các tham số của nó trong mẫu Django không?Django: lấy URL của trang hiện tại, bao gồm các thông số, trong một mẫu
Ví dụ, một templatetag đó sẽ in một URL đầy đủ như /foo/bar?param=1&baz=2
Viết bộ xử lý ngữ cảnh tùy chỉnh. ví dụ.
def get_current_path(request):
return {
'current_path': request.get_full_path()
}
thêm một đường dẫn đến chức năng đó trong TEMPLATE_CONTEXT_PROCESSORS
thiết lập của bạn thay đổi, và sử dụng nó trong mẫu của bạn như sau:
{{ current_path }}
Nếu bạn muốn có request
đối tượng đầy đủ trong mọi yêu cầu, bạn có thể sử dụng bộ xử lý ngữ cảnh được xây dựng trong django.core.context_processors.request
và sau đó sử dụng {{ request.get_full_path }}
trong mẫu của bạn.
Xem:
Đừng quên sử dụng urlencode tức là '{{request.get_full_path | urlencode}}' nếu bạn cần điều này để chuyển hướng – Medorator
Trong một tập tin context_processors.py (hoặc tương tự):
def myurl(request):
return { 'myurlx': request.get_full_path() }
Trong settings.py:
TEMPLATE_CONTEXT_PROCESSORS = (
...
wherever_it_is.context_processors.myurl,
...
Trong template.html của bạn:
myurl={{myurlx}}
Xin lỗi, bị bỏ qua do nhầm lẫn .. hãy thực hiện thay đổi để tôi có thể hoàn tác việc đó. –
Django có rất nhiều thứ built-in, nhưng nếu bạn không rõ ràng những gì bạn muốn sử dụng, nó đã giành' t được sử dụng. Vì vậy, trong lược đồ MTV (Model, Template, View) khung nhìn nhận một yêu cầu và sử dụng một mẫu render để tạo ra một phản hồi, chuyển nó vào một từ điển hoặc tất cả các biến cục bộ (sử dụng hàm locals()) lượt xem. Biết được điều này, chúng ta có thể chèn url hiện tại đến từ các phản ứng, như thế này:
views.py:
from django.shortcuts import render
def page(request):
currentUrl = request.get_full_path()
return render(request, 'app/page.html', locals())
Sau đó, trong bản mẫu 'app/page.html' bạn chỉ phải làm sau đây để hiển thị các biến CURRENTURL mà chúng ta vừa tạo ra và đi qua qua người dân địa phương():
app/template/page.html:
{{ currentUrl }}
Trong dùng chung một câu trả lời sdolan của:
nếu bạn đang sử dụng I18N và muốn chuyển next
giá trị cho /i18n/setlang/
để thay đổi ngôn ngữ của trang hiện tại, khi đó bạn sẽ cần phải loại bỏ mã ngôn ngữ hiện tại khỏi đường dẫn đầy đủ. Một cái gì đó như:
full_path = request.get_full_path()
current_path = full_path[full_path.index('/', 1):]
này giả định rằng tất cả các con đường có định dạng /LANG_CODE/any/other/stuff/with/?param='yay'
và chỉ đơn giản là đá ra LANG_CODE
bất cứ điều gì (ví dụ, /en/
sẽ cho kết quả thành /
).
Sử dụng trình xây dựng của Django trong bộ xử lý ngữ cảnh để nhận yêu cầu trong ngữ cảnh mẫu. Trong cài đặt thêm request
xử lý để TEMPLATE_CONTEXT_PROCESSORS
TEMPLATE_CONTEXT_PROCESSORS = (
# Put your context processors here
'django.core.context_processors.request',
)
Và trong mẫu sử dụng:
{{ request.get_full_path }}
Bằng cách này bạn không cần phải viết bất kỳ mã mới của chính mình.
Cần lưu ý rằng việc sử dụng phương pháp này sẽ ghi đè TEMPLATE_CONTEXT_PROCESSORS mặc định, do đó bạn sẽ phải thêm những người đó vào danh sách . [Các tài liệu] (https://docs.djangoproject.com/en/dev/ref/settings/#std:setting-TEMPLATE_CONTEXT_PROCESSORS) có một danh sách các giá trị mặc định để đưa vào danh sách. – carruthd
Bạn có thể xem liệu url của mình có khác với các URL khác hay không.
{% if 'foo/bar/' in request.get_full_path %}
thể trùng lặp của [Reading đường dẫn trong mẫu] (http://stackoverflow.com/questions/2127937/reading-path-in-templates) –
khác trùng lặp có thể là [Lấy URL hiện tại withing mẫu Django ] (http://stackoverflow.com/questions/2882490/get-the-current-url-within-a-django-template) –