Die Funktion urlize von django.utils.html konvertiert URLs in klickbare Links. Mein Problem ist, dass ich ein Target = "_ blank" an die "< href ..>" anhängen möchte, damit ich diesen Link in einem neuen Tab öffne. Gibt es eine Möglichkeit, dass ich die urlize-Funktion erweitern kann, um ein zusätzliches Argument zu erhalten? oder sollte ich einen benutzerdefinierten Filter mit Regexes machen, um diese Sachen zu machen? Ist das effizient?Erweitern von urlize in django
Antwort
In dem eingebauten urlize()
gibt es keine Möglichkeit, dies zu tun. Aufgrund der Lizenz von Django können Sie den Code django.utils.html.urlize
und django.template.defaultfilters.urlize
in Ihr Projekt oder in eine separate App kopieren und stattdessen die neuen Definitionen verwenden.
Sie sollten target="_blank"
nicht zu Ihren Links hinzufügen, es ist veraltet. Benutzer sollten selbst entscheiden, ob sie einen Link öffnen möchten.
Sie können immer noch die Verbindung mit unaufdringlichen JavaScript öffnen wie so (mit jQuery):
$('.container a').click(function(e){e.preventDefault();window.open(this.href);});
Das heißt, Sie Ihre eigenen Filter schreiben könnte, aber Sie würden eine Menge Code aus django.utils.html.urlize
kopieren müssen , nicht wirklich DRY.
Sie können einen benutzerdefinierten Filter hinzufügen, wie here beschrieben:
ich verwendet, um dieses ein:
def url_target_blank(text):
return text.replace('<a ', '<a target="_blank" ')
url_target_blank = register.filter(url_target_blank, is_safe = True)
Anwendungsbeispiel:
{{ post_body|urlize|url_target_blank }}
funktioniert gut für mich :)
coole Antwort, es hat mir auch geholfen, danke! – dana
Ich musste hinzufügen: url_target_blank.is_safe = True, um zu verhindern, dass Django die Verbindung verlässt. –
Um eine breitere Verwendung von url_target_blank zu erlauben und es etwas enger zu machen: def url_target_blank (Wert): return re.sub ("? ] +) (", " ', Wert) – Boaz
Kürzeste Version, die ich in meinen Projekten verwende. Erstellen Sie einen neuen Filter, der den Standardfilter von Django erweitert:
from django import template
from django.template.defaultfilters import stringfilter
from django.utils.safestring import mark_safe
from django.utils.html import urlize as urlize_impl
register = template.Library()
@register.filter(is_safe=True, needs_autoescape=True)
@stringfilter
def urlize_target_blank(value, limit, autoescape=None):
return mark_safe(urlize_impl(value, trim_url_limit=int(limit), nofollow=True, autoescape=autoescape).replace('<a', '<a target="_blank"'))
Du brauchst auch 'from django.utils.safestring import mark_safe' – Nick
Du hast recht - danke. Antwort korrigiert –
- 1. Django erweitern django-cms Ansicht
- 2. Django Restauth erweitern Registrierungsformular
- 3. Wie django admin erweitern auswählen?
- 4. Probleme erweitern change_form.html in django admin
- 5. Erweitern Sie Abfrage in Django Python
- 6. Erweitern des Benutzerprofils in Django. Admin Erstellung von Benutzern
- 7. django erweitern Javascript Übersetzung Katalog mit bestimmten Nachrichten von django.po
- 8. Django: Überschreiben und Erweitern einer App-Vorlage
- 9. Django: Wie "Gruppenerstellung" mit Signalen "erweitern"?
- 10. django erweitern installiert App-Modell speichern Methode
- 11. Wie erweitern Sie eine Django Pluggable App?
- 12. Django Template umfassen/erweitern mit Unterverzeichnisse
- 13. Erweitern des Admin-Importformulars für django import_export
- 14. Benutzerobjekt in Django erweitern: Benutzermodellvererbung oder UserProfile verwenden?
- 15. Erweitern django Rest Framework zu erben Kontext in verschachtelten Serialisierer
- 16. Erweitern von Tabellen in SQL
- 17. Erweitern von Makros in Dolist
- 18. Erweitern von Datenobjekt in TypeScript
- 19. Erweitern von WebFormView in MVC
- 20. Erweitern einer Vorlage, die bereits in Django erweitert wurde
- 21. Erweitern von System.Convert
- 22. Von generischem Supertype erweitern?
- 23. Erweitern von Microsoft.VisualStudio.TestTools.DataSource.XML
- 24. ExtJS6 Erweitern von Komponenten
- 25. Erweitern Array von TypeScript
- 26. Erweitern von AlertDialog
- 27. Erweitern von jqgrid subgrid
- 28. Erweitern von DataGrid
- 29. Erweitern von AbsListView Beispiel
- 30. Wie django Ansichten/Vorlagen auf eine zukunftsorientierte Weise zu erweitern
Nicht mehr veraltet in HTML5. –
"Nicht mehr veraltet in HTML5" Das stimmt. W3Schools sagt [HTML5 Tag A] (http://www.w3schools.com/html5/tag_a.asp) und ein anderer Artikel sagt [XHTML verwarf ein Ziel-Tag] (http://www.infranet.com/_blog/Complete_Website_Optimization_Blog/ post/Replacing_the_XHTML_deprecated_a_target_tag /) –
W3Schools ist keine gute Quelle. Gehe lieber direkt zur Spezifikation. – stefanw