在用 html 编写的文本字段内渲染 django 标记

Posted

技术标签:

【中文标题】在用 html 编写的文本字段内渲染 django 标记【英文标题】:render django tag inside textfield written in html 【发布时间】: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 插入多对一关系? 【参考方案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;在文本字段中呈现它

以上是关于在用 html 编写的文本字段内渲染 django 标记的主要内容,如果未能解决你的问题,请参考以下文章

渲染视图在模板中包含 django 位置字段

Django-summernote 工作正常,但显示带有 HTML 标记的文本

在 Django 模板中渲染 Json 数组

使用 django 模板呈现可变数量的文本字段/输入对

自定义 django 表单字段渲染

使用模板渲染 django 小部件?