Déterminer le type de variable à l'intérieur de django template
J'ai une variable que je suis en tirant dans une table qui est parfois une date et, parfois, est une chaîne de caractères. Si la variable est une date, je veux changer la mise en forme:
<td>{{ action.extra_column|date:"M d" }}</td>
Mais si c'est une chaîne, je veux juste de l'afficher est:
<td>{{ action.extra_column }}</td>
Si j'essaie de le formater et c'est une chaîne, je n'ai pas de sortie pour la variable.
Comment puis-je déterminer le type afin que je puisse régler mon rendu en fonction de leur type.
il dépend de la variable qui est passée. Pour être honnête, c'est un peu une simplification. L'views.py passe un tableau qui a une variable "extra_column." Pensez à cela comme une caractéristique de l ' "action". Selon le contexte du modèle, je veux montrer à la date de l'action, ou que je veuille montrer les détails de l'action. Donc, c'est toujours de l'action.extra_column, mais ce extra_column peut-être un jour ou peut être une chaîne de caractères.
Je pense que vous avez besoin pour inclure plus de code dans votre question, à l'instar de la ligne(s) à partir de votre point de vue de la définition
Je pense que vous avez besoin pour inclure plus de code dans votre question, à l'instar de la ligne(s) à partir de votre point de vue de la définition
action
. Il semble que vous essayez de mettre trop de logique dans le modèle. En général, assurez-vous que votre point de vue passe de votre modèle de données et vous ne devriez pas avoir à faire beaucoup de travail pour s'assurer qu'elle vient de sortir en HTML correctement.
OriginalL'auteur Ed. | 2012-08-18
Vous devez vous connecter pour publier un commentaire.
Comme Ignacio Vazquez-Abrams a souligné dans le premier commentaire, c'est pas vraiment un excellent moyen de code de votre logique. Je voudrais vous assurer que votre variable d'un certain type. Qui pourrait être résolu par une variable supplémentaire que vous ajoutez à le contexte ou l'objet qui contient les données et quelque chose qui décrit le type de données.
Si vous voulez coller à votre logique, une approche possible serait d'écrire votre propre modèle de filtre (appelons
date_or_string
). Le filtre peut sous-classe de la builtindate
filtre avec le format de paramètre facultatif. Dans le cas où le paramètre est passé il fonctionne comme la normaledate
filtre, sans paramètre, il retourne simplement la chaîne de caractères. Dans un scénario plus complexe le filtre peut aussi faire un peu de type de vérification. Juste une idée, je n'aurais pas du mettre ce genre de logique dans le modèle.OriginalL'auteur Dirk Eschler
Vous pourriez également mettre en œuvre un modèle général de filtre comme un équivalent de la
type()
builtin:Je pense Ignacio et Dirk sont droit, cependant. Tu ne peux pas avoir deux clés (vous dites "array", mais je suppose que vous voulez dire "dictionnaire" du fait que les éléments ont des noms) appelé
date
etdetail
?Mon point est que le modèle de ne pas besoin de savoir si pour afficher la date ou le détail; il peut certainement juste l'affichage selon l'une est-elle définie?
oui. mais souvent, ils sont tous les deux définis. Mais même quand ils ne le sont pas, le choix dépend du contexte de la vue. Je suis désolé, je ne suis pas d'expliquer ce assez bien.
Je vais heureux de présenter une réponse différente (bien qu'il semble toujours comme mon modèle de filtre vous donne exactement la "déterminer le type de variable à l'intérieur de django modèle de comportement que vous avez demandé), mais je pense que vous avez juste besoin d'avoir besoin de nous en dire plus! Vos explications ne sont pas floues, juste incomplète.
Je savais ce qui suggère que
getattribute
filtre revenir à la mords-moi assez vite... je pense que de tenter de l'utiliser à la fois dans le même modèle est un GÉANT DRAPEAU ROUGE que vous tentez de mettre trop de logique dans le modèle de la couche. Juste mon$.02
OriginalL'auteur supervacuo
Je sais que je suis vraiment en retard sur ce (en trois ans), mais je viens ici à la recherche de faire quelque chose de similaire et est venu avec ce que je pense est une solution décente.
Il suffit d'ajouter une fonction à votre modèles comme
get_model_type
et de l'avoir de retour de quelque chose que vous attendez de chaque modèle comme suit:Puis dans votre modèle, vous pouvez facilement appeler cette fonction:
OriginalL'auteur cardonator