簡體   English   中英

Django/CKEditor/Javascript 問題,包括 textarea 中的文本

[英]Django/CKEditor/Javascript Issue including text in textarea

我正在使用 Django 開發一個論壇,該論壇允許用戶相互回復(並引用原始用戶)。 當我第一次回復時,這非常有效(我使用的是一行 javascript,它通過從我的視圖中獲取 id 並使用 django 模板更新 innerHTML 來更新 textarea,請參閱下面的 html 模板):

在此處輸入圖片說明

在此處輸入圖片說明

問題是,當我嘗試引用已引用的消息時,textarea 字段中沒有顯示任何內容。 以下是我的觀點和模板:

看法

@login_required
def reply_to_post(request, pk, topic_id, post_pk):
reply = get_object_or_404(Post, topic_id=topic_id, pk=post_pk)
topic = get_object_or_404(Topic, board__pk=pk, pk=topic_id)
if request.method == 'POST':
    form = PostForm(request.POST)
    if form.is_valid():
        post = form.save(commit=False)
        post.post = reply
        post.created_by = request.user
        post.topic = topic
        user = reply.created_by
        title = post.topic
        post.save()
        
        reply.last_update = timezone.now()
        reply.save()
        notify.send(request.user, recipient=user, actor=request.user, verb='replied to your post', target=title, nf_type='replied_by_one_user')
        reverse('home')
        
        topic_url = reverse('topic_posts', kwargs={'pk': pk, 'topic_pk': topic_id})
        topic_post_url = '{url}?page={page}#{id}'.format(
            url = topic_url,
            id=post.pk,
            page=topic.get_page_count()
        )
        return redirect(topic_post_url)
else:
    form = PostForm
    
return render(request, 'reply_post.html', {'topic': topic, 'form': form, 'reply': reply})

回復_form.html

{% load form_tags widget_tweaks %}
{% load static %}
{% if form.non_field_errors %}
<div class="alert alert-danger" role="alert">
    {% for error in form.non_field_errors %}
        <p {% if forloop.last %} class="mb-0"{% endif %}>{{ error }}</p>
    {% endfor %}
</div>
{% endif %}

{% for field in form %}
<div class="form-group">

    {{ field.label_tag }}

    {% render_field field class=field|input_class %}
    {% for error in field.errors %}
        <div class="invalid-feedback">
            {{ error }}
        </div>
    {% endfor %}

    {% if field.help_text %}
        <small class="form-text text-muted">
            {{ field.help_text|safe }}
        </small>
    {% endif %}
</div>
{% endfor %}

{% block extrahead %}
<script>
document.getElementById("id_message").innerHTML = "<blockquote><i><b>{{ reply.created_by }} 
wrote:</b><br />{{ reply.message|safe }}</i></blockquote>";
</script>
{% endblock %}

回復_post.html

{% extends 'base.html' %}

{% load static %}

{% block title %}Post a reply{% endblock %}

{% block stylesheet %}
    <link rel="stylesheet" href="{% static 'css/simplemde.min.css' %}">
{% endblock %}

{% block javascript %}
{% endblock %}

{% block breadcrumb %}
    <li class="breadcrumb-item"><a href="{% url 'home' %}">Boards</a></li>
    <li class="breadcrumb-item"><a href="{% url 'board_topics' topic.board.pk %}">{{ topic.board.name }}</a></li>
    <li class="breadcrumb-item"><a href="{% url 'topic_posts'  topic.board.pk topic.pk %}">{{ topic.subject }}</a></li>
    <li class="breadcrumb-item active">Post a reply</li>
{% endblock %}

{% block content %}
    <form method="post" novalidate>
        {% csrf_token %}
        {{ form.media }}
        {% include 'includes/reply_form.html' %}
        <button type="submit" class="btn btn-success">Post a reply</button>
        {{ reply.message|safe }}
    </form>
    <div style="height: 200px; overflow: scroll;">
    {% 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_messages_as_markdown }}
            </div>
        </div>
    {% endfor %}
    </div>
{% endblock %}

奇怪的是,我可以在 textarea 之外呈現此內容(請參閱reply_post.html): 在此處輸入圖片說明

想通了這個問題,使用javascript你需要用`符號封裝字符串,所以javascript行是:

document.getElementById("id_message").innerHTML = `<blockquote><i><b>{{ reply.created_by }} 
wrote:</b><br />{{ reply.message|safe }}</i></blockquote>`

編碼的樂趣,幾個字符是問題!

document.getElementById("id_message").innerHTML = `<blockquote><i><b>{{ reply.created_by }} 
wrote:</b><br />{{ reply.message|safe }}</i></blockquote>`

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM