【问题标题】:How to Insert HTML code to database using json and django?如何使用 json 和 django 将 HTML 代码插入数据库?
【发布时间】:2020-10-19 13:09:13
【问题描述】:

我正在尝试将 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

serializer.py

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

views.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 数据的任何标签,我可以轻松地从数据库中保存和检索。

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:

    存储和检索 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) 呈现模板。

    但是,您也可以只将 HTML 字符串传递给预定义的模板,然后使用 Django 模板系统和/或 JavaScript 处理该端的呈现。

    【讨论】:

      猜你喜欢
      • 2014-08-29
      • 2021-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-15
      • 1970-01-01
      • 1970-01-01
      • 2018-08-30
      相关资源
      最近更新 更多