Что ж, вы можете попробовать получить заголовок реферера из запроса, но, насколько я знаю, он зависит от браузера и не очень надежен , так что вы делаете это наверное лучше. Вы можете попытаться упростить жизнь, создав шаблонные теги, чтобы избежать необходимости переписывать возвращаемый URL вручную.
Вы легко можете получить текущий URL-адрес из объекта request
django на любой странице, поэтому вместо установки его вручную по ссылке вы можете написать фрагмент HTML:
link_to_login.html
<!-- You should probably get /login/ using the {% url ... %} template tag -->
<a href="/login/?login_cancel_url={{ request.path|urlencode }}">
Login Page</a>
и используйте шаблонный тег {% include "link_to_login.html"%}
.
В качестве альтернативы, Если текст должен отличаться в зависимости от ссылки, вместо этого можно создать тег шаблона включения :
templatetags / extra_auth_tags.py
@register.inclusion_tag('templates/extra_auth_tags/login_link.html')
def login_link(context, text=None):
return {
'text':text
}
шаблоны / extra_auth_tags / login_link.html
<!-- You should probably get /login/ using the {% url ... %} template tag -->
<a href="/login/?login_cancel_url={{ request.path|urlencode }}">
{% if text %}
{{ text }}
{% else %}
Some Default Text
{% endif %}
</a>
и затем назовите его в своих шаблонах как {% login_link text="Check you messages" %}
. Помните, что ключевые аргументы для тегов включения поддерживаются только в версии django dev, поэтому вам может потребоваться написать тег шаблона вручную.