Comment concaténer des chaînes de caractères dans les modèles django?
Je veux concaténer une chaîne de caractères dans un Django modèle de la balise:
{% extend shop/shop_name/base.html %}
Ici shop_name
est ma variable et je veux concaténer ce avec le reste du chemin.
Supposons que j'ai shop_name=example.com
et je veux le résultat de prolonger shop/example.com/base.html
.
Vous devez vous connecter pour publier un commentaire.
Utiliser avec:
shop_name
à tous, donc c'est dangereux.shop_name
avant de le transmettre au contexte en vue de laget_context_data
assurez-vous qu'il est traduit à l'aide deugettext
au lieu deugettext_lazy
.Ne pas utiliser
add
pour les chaînes, vous devez définir une balise personnalisée comme ceci :Créer un fichier :
<appname>\templatetags\<appname>_extras.py
et ensuite l'utiliser comme @Steven dit
Raison d'éviter
add
Selon la docs
Si les deux variables se trouvent être des entiers, le résultat serait inattendu.
addstr
add
" seul, ne pas utiliserstr()
à la première place et ne fonctionne pas tout pour moi, alors que votre solution fonctionne parfaitement{% load <appname>_extras %}
J'ai changé la hiérarchie des dossiers
et puis ci-dessous serait de travailler.
Maintenant ses en mesure de prolonger la base.html page.
Ont un look à la
ajouter
filtre.Edit: Vous pouvez la chaîne de filtres, de sorte que vous pourriez faire
"shop/"|add:shop_name|add:"/base.html"
. Mais cela ne marchera pas car c'est la balise de modèle pour évaluer les filtres dans les arguments, et ne s'étend pas.Je suppose que vous ne pouvez pas le faire dans les modèles.
De la documentation:
Cette balise peut être utilisée de deux façons:
{% extends "base.html" %}
(avec les guillemets) utilise la valeur littérale "base.html" comme le nom du template parent pour étendre.{% extends variable %}
utilise la valeur de la variable. Si la variable prend la valeur d'une chaîne de caractères, Django utilisera cette chaîne comme le nom du modèle parent. Si la variable prend la valeur d'un objet de Modèle, Django va utiliser l'objet comme le modèle parent.Semble que tu ne peux pas utiliser un filtre pour manipuler l'argument. Dans l'appel de la vue, vous devez instancier l'ancêtre de modèle ou de créer une variable de chaîne avec le chemin d'accès correct et de le transmettre avec le contexte.
Reportez-vous à La concaténation de Chaînes de caractères dans les Modèles Django:
Pour les versions antérieures de Django:
{{ "Mary had a little"|stringformat:"s lamb." }}
D'autre:
{{ "Mary had a little"|add:" lamb." }}
@error réponse est fondamentalement de droite, vous devriez être en utilisant une balise de modèle pour cela. Cependant, je préfère un peu plus générique balise de modèle que je peux utiliser pour effectuer tout type d'opérations de similaire à ceci:
et puis vous pouvez l'utiliser comme ceci dans votre modèle:
Que le commentaire mentionne, cette balise de modèle est particulièrement utile pour l'information qui est reproductible à travers un modèle, mais nécessite une logique et d'autres choses qui vont de bonde de vos modèles, ou dans le cas où vous souhaitez réutiliser les données transmises entre des modèles par le biais de blocs:
et puis:
De crédit pour le captureas balise est due ici: https://www.djangosnippets.org/snippets/545/
J'ai trouvé le travail avec les
{% with %}
tag pour être tout à fait une corvée. Au lieu de cela, j'ai créé le modèle suivant d'une étiquette, qui doit travailler sur des chaînes de caractères et les nombres entiers.Puis de charger le modèle de balise dans votre modèle en haut à l'aide de l'suivantes:
Vous pouvez ensuite l'utiliser de la manière suivante:
Personnellement, je trouve cela beaucoup plus propre pour travailler avec.
Vous ne pouvez pas faire de la variable de manipulation de modèles django.
Vous avez deux options, soit écrire votre propre modèle de balise ou de le faire en vue,
extends
a pas de possibilité pour cette. Soit mettre l'intégralité du chemin d'accès du modèle à une variable de contexte et de l'utiliser ou de copier la balise de modèle et de le modifier de façon appropriée.