Django-ckeditor: html-шаблон не отображает содержимое моего ckeditor должным образом, хотя я использую {{ content | safe }}.
Я использую плагин django-ckeditor для реализации поля ckeditor на моем сайте django. У меня есть updateView, где можно редактировать атрибут "notes" модели под названием Server. Виджет ckeditor отлично работает вот здесь в моем файле server_update_form.html:
<div class="flex flex-col items-center justify-center px-6 py-8 mx-auto md:h-screen lg:py-0">
<form class="w-full" action="" method="post">
{% csrf_token %}
{{ form.media }}
<table>
<div class="relative z-0 w-full mb-5 group">
<form class="max-w-sm mx-auto">
<label for="notes" class="block mb-2 text-sm font-medium text-gray-900 dark:text-white">{{ form.notes.label_tag }}</label>
{{ form.notes }}
</form>
</div>
</table>
<button
type="submit"
style="display:block"
class="w-1/10 text-white bg-orange-600 hover:bg-orange-700 focus:ring-4 focus:outline-none focus:ring-orange-300 font-medium rounded-lg text-sm px-5 py-2.5 text-center">
Submit
</button>
</form>
</div>
У меня также есть DetailView, в котором я хотел бы отобразить содержимое server.notes без возможности его редактирования. Мой server_detail.html выглядит так:
{% if server %}
<h1 class="mb-8 text-3xl font-bold">Server: {{ server.displayname }}</h1>
</div>
<div class="flex flex-col pt-3">
<dt class="mb-1 text-gray-500 md:text-sm dark:text-gray-40">Notes</dt>
<dd class="text-md mb-5 p-2 border rounded-md">
{{ server.notes |safe }}
</dd>
</div>
</dl>
Но html не отображает заметки должным образом: DetailView page
model.py:
class Server(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, help_text="Unique ID for this server", editable=False)
ip_address = models.CharField(max_length=30, help_text="Enter servers IP address")
displayname = models.CharField(max_length=100, help_text="Enter name of server")
description = models.CharField(max_length=1000, help_text="Enter short description of your server here", blank=True, null=True)
model = models.CharField(max_length=100, help_text="Enter model", blank=True, null=True)
notes = RichTextUploadingField(blank=True, null=True)
location = models.CharField(max_length=100, help_text="Enter servers location", blank=True, null=True)
contabo_api = models.CharField(max_length=100, help_text="Enter contabo API", blank=True, null=True)
nags_api = models.CharField(max_length=100, blank=True, null=True)
hosting_provider = models.CharField(max_length=100, blank=True, null=True)
production = models.BooleanField()
class Meta:
ordering = ['displayname']
def __str__(self):
return f'{self.displayname} ({self.ip_address})'
def get_absolute_url(self):
return reverse('server-detail', args=[str(self.id)])
def no_applications(self):
"""
returns the number of applications which are linked to this server.
"""
return Application.objects.filter(server=self).count()
View.py:
class ServerDetailView(LoginRequiredMixin, generic.DetailView, ):
model = Server
context_object_name = 'server'
def get_context_data(self, **kwargs: Any) -> dict[str, Any]:
"""
Extend context with applications of the server.
"""
context = super().get_context_data(**kwargs)
server_instance = self.get_object()
applications = Application.objects.filter(server=server_instance.pk)
context["applications"] = applications
no_applications = Application.objects.filter(server=server_instance.pk).count()
context["no_applications"] = no_applications
return context
class ServerUpdate(LoginRequiredMixin, UpdateView):
model = Server
form = ServerForm
template_name_suffix = '_update_form'
fields = ['displayname', 'ip_address', 'description', 'model', 'location', 'hosting_provider', 'production', 'notes']
forms.py:
class ServerForm(ModelForm):
content = CharField(widget=CKEditorUploadingWidget())
class Meta:
model = Server
fields = ['notes']
Я потратил бесчисленное количество часов, пытаясь решить эту проблему, и мне кажется, что я схожу с ума, я был бы очень признателен, если бы кто-нибудь из вас мог предложить свою помощь!