Django-protocolify is een template tag voor Django die het mogelijk maakt het protocol / regeling gebruikt in links binnen een blok van template code te wijzigen.
Een use-case voor dit is wanneer een deel van uw website maakt gebruik van HTTPS (bijvoorbeeld een betaling pagina) en je wilt dat de gebruiker in staat om terug te keren naar het gebruik van HTTP als ze de pagina te verlaten. Meestal wordt u met behulp van de {% url%} sjabloontag om URL's te genereren, maar zal dit resulteren in URL's, zoals:
/ Products /
liever dan:
http://example.com/products/
Dit betekent dat zodra een gebruiker een HTTPS-pagina komt, zullen ze worden geplakt via HTTPS, tenzij ze handmatig de URL in de adresbalk van hun browser te wijzigen.
Dit is waar de Django-protocolify schijnt.
Gebruik
{% Protocolify [oud] om
Voorbeeld (uitgaande verzoek zou http://example.com/blah/):
{% Belasting protocolify%}
{% Protocolify aan 'https'%}
{% Endprotocolify%}
renders naar:
Dit wordt momenteel geïmplementeerd met behulp van een paar simplistische reguliere expressies en urlparse.urljoin () (Let op: de oude standaard [a-zA-Z] +):
# Bijv. href = "http://google.com"
re.sub (r '(src | href) = "% s: //'% oud, r ' 1 ="% s: //'% nieuw, ...)
# Bijv. href = "../ producten"
re.findall (r "" "(src | href) = (" | ") ([az] [a-z0-9 + -.] *:!.?) (*) 2" "")
Als een relatief pad wordt vervangen (bijvoorbeeld ../products) het is verbonden met de request.path. Om dit te laten werken, moet de sjabloon context de HttpRequest in een verzoek variabele bevatten. Dit kan worden bereikt door een RequestContext en het toevoegen van "django.core.context_processors.request" om de instelling TEMPLATE_CONTEXT_PROCESSORS.
Domain ambiguitity wordt geïntroduceerd als een relatief pad (bv / products /) is protocolified (omdat het domein moet worden opgegeven). Domain gissingen worden uitgevoerd in de volgende volgorde:
1. request.META ["HTTP_HOST"] - wanneer de context bevat verzoek
2. Site.objects.get_current (). Domain
installatie
1. Download en installeer: pip installeren django-protocolify
2. Voeg "protocolify" om de INSTALLED_APPS instelling in uw project
Eisen .
- Python
- Django
Reacties niet gevonden