首页 > 解决方案 > 如何使用 json 和 django 将 HTML 代码插入数据库?

问题描述

我正在尝试将 HTML 模板代码直接添加到 django-rest-framework 中的数据库中。并希望使用 json 作为检索并添加 html 代码。我怎样才能做到这一点?

class AddHTML(models.Model):
template_name   = models.CharField(max_length=50, default="")
HTML_code       = models.TextField(default="")

def __str__(self):
    return self.template_name

序列化程序.py

class AddHTMLSerializer(serializers.ModelSerializer):
class Meta:
    model = AddHTML
    fields = '__all__'

视图.py

class HTMLData(APIView):
def get(self, request, format=None):
    html = AddHTML.objects.all()
    serializer = AddHTMLSerializer(html, many=True)
    return Response(serializer.data)

def post(self, request, format=None):
    serializer = AddHTMLSerializer(data=request.data)
    if serializer.is_valid():
        serializer.save()
        return Response(serializer.data, status=status.HTTP_201_CREATED)
    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)


class HTMLDataDetail(APIView):
def get_object(self, id):
    try:
        return AddHTML.objects.get(id=id)
    except AddHTML.DoesNotExist:
        return Response(status=status.HTTP_404_NOT_FOUND)

def get(self, request, id, format=None):
    html = self.get_object(id)
    serializer = AddHTMLSerializer(html)
    return Response(serializer.data)

def put(self, request, id, format=None):
    html = self.get_object(id)
    serializer = AddHTMLSerializer(html, data=request.data)
    if serializer.is_valid():
        serializer.save()
        return Response(serializer.data)
    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

def delete(self, request, id, format=None):
    html = self.get_object(id)
    html.delete()
    return Response(status=status.HTTP_204_NO_CONTENT)

在视图中,我应该做什么而不丢失任何 HTML 数据标签,我可以轻松地从数据库中保存和检索。

标签: djangodjango-rest-framework

解决方案


存储和检索 HTML 应该不是问题,因为它只是作为文本存储,只需确保所有字符都正确转义。(即,\\在您的 HTML 字符串中,而不是\

现在,通过模板渲染 HTML 有点棘手,但还不错。您必须使用 HTML 创建一个模板对象:

db_value = 'Put the HTML from database here'
db_template = Template(db_value)
db_context = Context({'variables': 'Anything you want passed to the template goes here'})

从那里,您可以使用db_template.render(db_context).

但是,您也可以使用 Django 模板系统和/或 JavaScript 将 HTML 字符串传递给预定义的模板并在该端处理渲染。


推荐阅读