【问题标题】:render django tag inside textfield written in html在用 html 编写的文本字段内渲染 django 标记
【发布时间】:2016-07-14 03:31:20
【问题描述】:

我是 django 和一般编程的初学者,想问一个关于如何在文本字段中保存 html 中呈现 django 模型字段的问题。

我的代码 sn-p 如下:

模型.py

class Recipe(models.Model):
    recipe_name = models.CharField(max_length=128)
    recipe_text = models.TextField()
    ingredients = models.TextField()

def __str__(self):
    return self.recipe_name

我有成分模型,其中包含成分对象,例如糖或盐。

class ingredient(models.Model):
    ingredient_name = models.CharField(max_length=200)
    ingredient_text = models.TextField()

    def __str__(self):
        return self.ingredient_name

例如,如果我使用“salt”的成分名称创建盐成分对象,我想在实例化的配方对象中调用成分名称,使用 ul 列表 html 代码的成分字段使用表单保存在其中并将代码传递给模板使用自动转义或安全标签。但它似乎不适用于该领域。 ul 列表的 html 工作,但内容似乎不起作用。它只会加载例如字符串 {{ ingredients.0.ingredient_name }}

我在views.py中同时传递配方对象和配料对象

还有其他方法吗?

【问题讨论】:

  • 您是否尝试过使用ForeignKey 插入多对一关系?

标签: python html django


【解决方案1】:

您需要将配方链接到配料:

class Ingredient(models.Model):
    ingredient_name = models.CharField(max_length=200)
    ingredient_text = models.TextField()

    def __str__(self):
        return self.ingredient_name

class Recipe(models.Model):
    recipe_name = models.CharField(max_length=128)
    recipe_text = models.TextField()
    ingredients = models.ManytoMany(Ingredient)

    def __str__(self):
        return self.recipe_name

然后,像这样创建你的成分:

salt = Ingredient(ingredient_name='salt', ingredient_text='as per taste')
salt.save()

chips = Ingredient()
chips.ingredient_name = 'Chips'
chips.ingredient_text = 'Delicious, goes well with salt'
chips.save()

接下来,将其添加到配方中:

recipe = Recipe()
recipe.recipe_name = 'Salty Chips'
recipe.recipe_text = 'Great for parties'
recipe.save() # You have to save it first

recipe.ingredients_set.add(salt)
recipe.ingredients_set.add(chips)

recipe.save() # Save it again

现在,在你看来:

def show_recipe(request):
    recipes = Recipe.objects.all()

    return render(request, 'recipe.html', {'recipes': recipes})

最后,在您的模板中:

{% for recipe in recipes %}
   {{ recipe.recipe_name }}
   <hr />
   Ingredients:
   <ul>
   {% for ingredient in recipe.ingredients_set.all %}
      <li>{{ ingredient }}</li>
   {% endfor %}
   </ul>
{% endfor %}

之所以有效,是因为您已经在 RecipeIngredient 模型之间创建了一种关系,使得每个 Recipe 可以有一个或多个 Ingredient 对象链接到它。

Django 将为您跟踪关系,并使用模型 api 您可以向任何配方对象添加(和删除)成分。

因为关系是为你管理的,只要你有一个Recipe 对象,它就知道所有链接到它的Ingredient 对象;我们可以轻松打印出正确的食谱。

【讨论】:

  • 这是否意味着无法使用带有自动转义的html编写的文本字段来呈现加载到其他对象字段中的django变量?
  • 您可以使用&lt;input type="text" value="{{ ingredient }}"&gt;在文本字段中呈现它
猜你喜欢
  • 2011-08-11
  • 1970-01-01
  • 2020-09-12
  • 2021-07-23
  • 1970-01-01
  • 2019-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多