0
votes

Pouvons-nous utiliser des API liées à Python sur les modèles Django?

Je suis nouveau à Django et ne pas avoir de connaissances approfondies à ce sujet. Donc, je suis confronté à quelques erreurs à Django.

Actuellement, j'essaie d'imprimer le type de variable du fichier HTML de modèle Django comme suit: xxx

pour ce qui précède, je reçois l'erreur suivante: < / p> xxx

alors qu'est-ce qui ne va pas ici? Comment pouvons-nous utiliser les API liés à Python (type de type (), bande (), get (), etc.) à partir des fichiers de modèle HTML? Je pense à l'intérieur de la {% ....%} Nous pouvons utiliser des évaluations liées à Python. Ai-je raison?

Veuillez jeter des lumières à ce sujet.


4 commentaires

Tout d'abord, vous devez transmettre les valeurs au modèle Django que vous travaillez comme des données de contexte. Alors seulement vous pouvez obtenir la valeur. Vous ne pouvez pas faire plus de fonctionnement ici. Le modèle Django n'est que pour la vision ou le rendu, il suffit de le transmettre et de montrer qu'il ne fait pas plus d'opérations ici. Ce sera une bonne pratique de le faire.


J'ai déjà passé les valeurs au modèle Django. Donc, après avoir passé la valeur, nous ne pouvons pas faire d'autre opération à ce sujet?


Soit basculer vers Jinja2 et déclarer le type comme une fonction sûre ou n'essayez pas de programmer des modèles (c'est la philosophie de la langue du modèle Django).


Ce n'est pas une bonne approche @RDX en général, assurez-vous simplement que votre point de vue passe votre modèle les bonnes données et vous ne devriez pas avoir à faire beaucoup de travail pour vous assurer qu'il sort dans HTML, juste exemple si vous souhaitez essayer la longueur de Valeur dans Python Vous pouvez utiliser Len (Your_Data), mais voici un petit changement consiste à obtenir la longueur d'une chaîne comme {{obj.data1 | longueur}}. Voici des accolades pour LEN () ne fonctionnera pas. Choisis sagement. Ma recommandation est de le faire de votre point de vue.


3 Réponses :


0
votes

Vous pouvez créer une classe qui inclut le type, vous pouvez donc appeler le type comme: variable.type ou vous pouvez envoyer les données de type du contrôleur. Si vous avez besoin de faire une logique de programmation réactive à l'avant, je vous suggère d'utiliser Vue, réagir ou angulaire.


0 commentaires

1
votes

Comme dit, ce n'est pas la philosophie de DTL, mais certaines fonctions qui transforment les entrées sont implémentées comme filtres .

De plus, vous pouvez écrire vos propres filtres et prendre en charge un filtre" Type ", serait très simple: < Pré> xxx

voir La documentation pour plus de détails.

L'approche de Jinja et DTL est explicite sur Implicit: au lieu d'aider aveuglément à toute fonction python avec tous les dangers, vous devez le permettre explicitement ou mettre en œuvre il.


0 commentaires

1
votes

Exécution du code Python arbitraire dans un modèle Django est intentionnellement désactivé. Outre les préoccupations de sécurité, la logique commerciale de votre projet devrait être séparée de votre couche de présentation. Cela fait partie de la bonne conception d'applications.

Il y a trois manières principales que vous pouvez appeler une opération à partir d'un modèle Django. P>

  1. passe dans une fonction et appelez-le. li>
  2. Utilisez un filtre de modèle, personnalisé ou intégré. Li>
  3. Utilisez une balise de modèle, personnalisée ou intégrée. li> ol>

    passe dans une fonction et appelez-le. h3>

    appeler une fonction passée à partir d'un modèle Django est standard. Cependant, il a deux mises en garde. p>

    1. La fonction doit renvoyer une valeur pouvant être une chaîne ou peut être contrainte à une chaîne. (Sinon, rien ne sera imprimé dans le modèle.) Li>
    2. La fonction ne doit pas avoir d'arguments requis. LI> ol>

      L'étui d'utilisation le plus courant est soit une valeur calculée, soit un getter par exemple p> xxx pré> xxx pré>

      filtres de modèle h3>

      voir La réponse de Melvyn pour un exemple de filtres de modèle. p>

      Filtres de modèle fonctionne sur une valeur . Donc, c'est parfait pour une fonction python comme type () code>. P>

      Tags de modèle h3>

      Edité: voir le commentaire de Melvyn. Strong>

      Tags simples de modèle sur l'autre main de la main plus comme une fonction. Ils acceptent les arguments de position et des mots clés et devraient à nouveau renvoyer une valeur. Je n'entrerai pas dans les tags d'inclusion ou la compilation avancée des balises et le rendu ici, mais vous pouvez en lire à ce sujet dans le Tagage de modèle personnalisé Django . p>

      Voici un exemple de deux étiquettes de modèle que j'inclus souvent dans un projet dans debug.py code >. p> xxx pré>

      i peut utiliser print_context code> pour imprimer le contexte actuel dans la borne et print_thing code> pour imprimer quelque chose. P>

      {% load debug %}
      {% print_context %}
      
      {% print_thing 'print this string' %}
      


2 commentaires

Nice écrire. Toutefois: les étiquettes de modèle ne sont pas ont pour renvoyer une valeur. Exemple classique étant le {% pour%} tag. Je n'entrerai pas dans la différence entre les fonctions et les routines, car je ne pense pas que quelqu'un sache plus. :)


Merci! C'est un bon point. Je pensais principalement à des balises simples qui rendront Aucun si aucune valeur n'est renvoyée. Mais vous avez raison, les tags d'inclusion et les balises plus complexes fonctionnent très différemment.