Noobie
Noobie

Reputation: 21

Django-ckeditor showing content as textarea

I'm working with django ckeditor now and I can't display content that can be saved normally and is displayed in the admin panel. Content is always displayed as textarea enter image description here

As you can see at the image, editor is working properly, also if i go to admin panel everything is OK, but if i want to display content of "body" ({{ form.body|safe}}), it will display only textarea of HTML code. models.py

class Stage(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    game_id = models.ForeignKey(Game,
                                  on_delete=models.CASCADE)
    name = models.CharField(max_length=128)
    sequence = models.IntegerField(null=False)
    body = RichTextUploadingField(config_name='LeftFields', blank=True, null=True)
    
    def get_questions(self):
        return Question.objects.filter(stage_id = self.id)

    def __str__(self):
        return str(self.name)

forms.py

class StageForm(ModelForm):
    class Meta:
        model = Stage
        fields = ['body','name']
        widgets = {
        'name': TextInput(attrs={
                'class': "left_input",
                'style': "width: 69.3%;",
            }),
        }

views.py

@login_required(login_url='/signin')
@user_passes_test(lambda u: u.is_staff)
def edit(request, gameid,id):
        stage = Stage.objects.get(pk=id)
        if request.method == 'POST':
            form = StageForm(request.POST, instance=stage)
            if form.is_valid():
                form.save()
            return redirect('/edit/' + gameid + '/' + id)
        form = StageForm(instance=stage)
        return render(request, "homeSuperuser/edit_stage.html", {'stage': stage, 'form': form,'gameid':gameid})

edit_stage.html

<!doctype html>
<html>
  <head> {% load static %}
    <link rel="stylesheet" href="{% static 'css/edit_pages.css' %}" />
    <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons" />
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.1/jquery.min.js"></script>
    <script type="text/javascript" src="{% static 'js/edit.js' %}"></script>
  </head>
  <body>
    <div class="row" id="mainDIV">
      <form id="main" method="post" action="{{ request.path }}"> 
      {% csrf_token %} 
      <div class="divs">
        <a>Název: </a>
         {{ form.name}}
        </div>
        <div class="divs"><a>Kontent:</a>
          {{ form.media }}
          {{ form.body}}
        </div>
        <div class="div_cent"><input type="submit" value="Uložit" class="subm" /></div>
      </form>
    </div>
    {{ form.body|safe}}
  </body>
</html>

Upvotes: 0

Views: 585

Answers (1)

SamSparx
SamSparx

Reputation: 5257

form.body is the field itself, so includes the HTML textarea markup.

Instead of

{{ form.body|safe}}

try

{{ form.body.value|safe}}

Upvotes: 1

Related Questions