Hi all. I'm studying Django and i want to create a forum.
This is the html code code:
{% extends 'base.html' %}
{% load static %}
{% load crispy_forms_tags %}
{% block title %}Post a reply{% endblock %}
{% block stylesheet %}
<link rel="stylesheet" href="https://cdn.jsdelivr.net/simplemde/latest/simplemde.min.css">
{% endblock %}
{% block breadcrumb %}
<li class="breadcrumb-item"><a href="{% url 'home' %}">Boards</a></li>
<li class="breadcrumb-item"><a href="{% url 'topic_list' topic.board.pk %}">{{ topic.board.name }}</a></li>
<li class="breadcrumb-item"><a href="{% url 'post_list' topic.board.pk topic.pk %}">{{ topic.subject }}</a></li>
<li class="breadcrumb-item active">Post a reply</li>
{% endblock %}
{% block content %}
<form class="mb-5" method="post">
{% csrf_token %}
{{ form.as_p }}
<input class="btn btn-primary" type="submit" value="Post a reply">
</form>
{% for post in topic.get_last_ten_posts %}
<div class="card mb-2">
<div class="card-body p-3">
<div class="row mb-3">
<div class="col-6">
<strong class="text-muted">{{ post.created_by.username }}</strong>
</div>
<div class="col-6 text-right">
<small class="text-muted">{{ post.created_at }}</small>
</div>
</div>
{{ post.get_message_as_markdown }}
</div>
</div>
{% endfor %}
{% endblock %}
{% block javascript %}
<script src="https://cdn.jsdelivr.net/simplemde/latest/simplemde.min.js"></script>
<script>
var simplemde = new SimpleMDE();
</script>
{% endblock %}
Here is the model:
But i want to add text editor when creating a new post using SimpleMDE() javascript library
I changed the view code for html:
Here is full source code: Link to full source code
What should i do if i want to using text editor for this field?
This is the html code code:
{% extends 'base.html' %}
{% load static %}
{% load crispy_forms_tags %}
{% block title %}Post a reply{% endblock %}
{% block stylesheet %}
<link rel="stylesheet" href="https://cdn.jsdelivr.net/simplemde/latest/simplemde.min.css">
{% endblock %}
{% block breadcrumb %}
<li class="breadcrumb-item"><a href="{% url 'home' %}">Boards</a></li>
<li class="breadcrumb-item"><a href="{% url 'topic_list' topic.board.pk %}">{{ topic.board.name }}</a></li>
<li class="breadcrumb-item"><a href="{% url 'post_list' topic.board.pk topic.pk %}">{{ topic.subject }}</a></li>
<li class="breadcrumb-item active">Post a reply</li>
{% endblock %}
{% block content %}
<form class="mb-5" method="post">
{% csrf_token %}
{{ form.as_p }}
<input class="btn btn-primary" type="submit" value="Post a reply">
</form>
{% for post in topic.get_last_ten_posts %}
<div class="card mb-2">
<div class="card-body p-3">
<div class="row mb-3">
<div class="col-6">
<strong class="text-muted">{{ post.created_by.username }}</strong>
</div>
<div class="col-6 text-right">
<small class="text-muted">{{ post.created_at }}</small>
</div>
</div>
{{ post.get_message_as_markdown }}
</div>
</div>
{% endfor %}
{% endblock %}
{% block javascript %}
<script src="https://cdn.jsdelivr.net/simplemde/latest/simplemde.min.js"></script>
<script>
var simplemde = new SimpleMDE();
</script>
{% endblock %}
Here is the model:
class Post(TimestampedModel): message = models.CharField(max_length=4000) topic = models.ForeignKey(Topic, on_delete=models.CASCADE, related_name='posts') created_by = models.ForeignKey(User, on_delete=models.CASCADE, related_name='posts') last_updated_by = models.ForeignKey(User, on_delete=models.CASCADE, related_name='+') def __str__(self): truncated_msg = Truncator(self.message) return truncated_msg.chars(30) def get_message_as_markdown(self): return mark_safe(markdown(self.message, safe_mode='escape'))If i using this view code:
class PostCreateView(LoginRequiredMixin, generic.CreateView): model = models.Post fields = ('message',) template_name = 'boards/reply_topic.html' def get_context_data(self, **kwargs): kwargs['topic'] = get_object_or_404(models.Topic, pk=self.kwargs.get('topic_pk'), board__pk=self.kwargs.get('board_pk')) return super().get_context_data(**kwargs) def get_success_url(self): return reverse_lazy('post_list', kwargs={'board_pk': self.kwargs.get('board_pk'), 'topic_pk': self.kwargs.get('topic_pk')}) def form_valid(self, form): user = self.request.user topic = get_object_or_404(models.Topic, pk=self.kwargs.get('topic_pk'), board__pk=self.kwargs.get('board_pk')) post = form.instance post.topic = topic post.created_by = user post.last_updated_by = user post.save() return HttpResponseRedirect(self.get_success_url())A new post will be created after i click submit (Post a reply) button and page will be redirected to get_success_url function (post_list)
But i want to add text editor when creating a new post using SimpleMDE() javascript library
I changed the view code for html:
class PostCreateView(LoginRequiredMixin, generic.CreateView): model = models.Post fields = ('message',) template_name = 'boards/reply_topic.html' def get_form(self, form_class=None): form = super().get_form(form_class) form.fields['message'].widget = forms.Textarea() return form def get_context_data(self, **kwargs): kwargs['topic'] = get_object_or_404(models.Topic, pk=self.kwargs.get('topic_pk'), board__pk=self.kwargs.get('board_pk')) return super().get_context_data(**kwargs) def get_success_url(self): return reverse_lazy('post_list', kwargs={'board_pk': self.kwargs.get('board_pk'), 'topic_pk': self.kwargs.get('topic_pk')}) def form_valid(self, form): user = self.request.user topic = get_object_or_404(models.Topic, pk=self.kwargs.get('topic_pk'), board__pk=self.kwargs.get('board_pk')) post = form.instance post.topic = topic post.created_by = user post.last_updated_by = user post.save() return HttpResponseRedirect(self.get_success_url())or using a form with code:
class NewPostForm(forms.ModelForm): class Meta: model = Post fields = ('message',) widgets = {'message': forms.Textarea()}with view code:
class PostCreateView(LoginRequiredMixin, generic.CreateView): model = models.Post form_class = NewPostForm template_name = 'boards/reply_topic.html'After changing the code, text editor is showed when creating a new post. But when a click submit (Post a reply) button, nothing happen. Post is not created when i click submit button and nothing happen when i click this button. no redirect to get_success_url page.
Here is full source code: Link to full source code
What should i do if i want to using text editor for this field?