【问题标题】:TinyMCE submitting raw text with HTML tagsTinyMCE 提交带有 HTML 标签的原始文本
【发布时间】:2016-09-20 12:20:36
【问题描述】:

我在表单中使用 TinyMCE 文本区域来创建新的博客文章;当我点击“提交”时,我应该被重定向到一个新的博客页面,其中包含我在文本区域中输入的格式化内容。我实际得到的是带有<p><strong> 等标签的原始内容。

是否配置不正确?代码如下:

我的模板中的 TinyMCE 配置 <head>:

<script src="//cdn.tinymce.com/4/tinymce.min.js"></script>
<script type="text/javascript">
    tinymce.init({ 
        selector:'textarea' 
});
</script>

带有 TinyMCE 文本区域的表单:

<h1>New post</h1>
    <form method="POST" class="progresstracker-form">{% csrf_token %}
        {{ form.as_p }}
        <button type="submit" class="save btn btn-default">Save</button>
    </form>

查看相关代码以处理新博文:

def pt_detail(request, slug):
    ptpost = get_object_or_404(Post, slug=slug)
    return render(request, 'blog/pt_detail.html', {'ptpost': ptpost})

def progresstracker(request):
    posts = Post.objects.order_by('published_date')
    return render(request, 'blog/progresstracker.html', {'posts': posts})

def progresstracker_new(request):
    if request.method == "POST":
        form = PostForm(request.POST)
        if form.is_valid():
            ptpost = form.save(commit=False)
            ptpost.author = request.user
            ptpost.published_date = timezone.now()
            ptpost.save()
            return redirect('pt_detail', slug=ptpost.slug)
    else:
        form = PostForm()
    return render(request, 'blog/post_edit.html', {'form': form})

def post_edit(request, slug):
    ptpost = get_object_or_404(Post, slug=slug)
    if request.method == "POST":
        form = PostForm(request.POST, instance=ptpost)
        if form.is_valid():
            ptpost = form.save(commit=False)
            ptpost.author = request.user
            ptpost.published_date = timezone.now()
            ptpost.save()
            return redirect('pt_detail', slug=ptpost.slug)

    else:
        form = PostForm(instance=ptpost)
    return render(request, 'blog/post_edit.html', {'form': form})

【问题讨论】:

  • 如果您想获得有用的答案,请分享代码。
  • 我贴的代码够吗?

标签: django tinymce


【解决方案1】:

我在 tinyMCE 和 Javascript 函数、媒体引用等方面陷入了困境,最终在我 (1) 回到非常简单的 tinyMCE 代码(如下所示)和 (2) 添加时解决了我的问题"|safe" 指向对 tinyMCE 文本的实际引用。

模板

<header>
.
.
<script src="//tinymce.cachefly.net/4.3/tinymce.min.js"></script>
<script type="text/javascript">
tinymce.init({ 
    selector: 'textarea'
});
</script>
</header>

<body>
.
.
    {% for post in posts %} 
        <h3><a href="{{ post.get_absolute_url }}">{{ post.title }}</a></h3>
        <p style="font-size: 16px">{{ post.published_date|date:'M d, Y' }}</p>
           {{ post.body|truncatewords:50|safe }}
        <hr></hr>
    {% endfor %}
.
.
</body>

【讨论】:

  • 最简单最有效的解决方案。谢谢你:)
【解决方案2】:

要从 TinyMCE 获取内容,您必须使用编辑器函数 getContent()。我不知道 Django 但也许你应该使用一个隐藏的文本输入来保存 TinyMCE 的内容:

<script type="text/javascript">
    tinymce.init({ 
        selector:'textarea.my_css' 
    });

    function saveContent() {
        var ed = tinymce.activeEditor;
        $('#hidContents').val(ed.getContent());
    }
</script>

<h1>New post</h1>
<form method="POST" class="progresstracker-form">{% csrf_token %}
     {{ form.as_p }}
     <button type="submit" class="save btn btn-default" onclick="saveContent">Save</button>
     <input id="hidContents" type="hidden" name="hidContents">
</form>

建议:

  • 使用最新版本的 TinyMCE (v4.4.3)
  • 总是使用更具体的选择器,这样您就可以确定您使用的是正确的文本区域 - 例如:selector: 'textarea.my_css'

【讨论】:

  • 感谢您的建议。我尝试了您的代码,当我点击“保存”时,它会将我带到一个没有文本的页面(我假设所有内容都被代码隐藏了)。知道我如何实际显示文本,无论是否加粗、斜体等?
猜你喜欢
  • 1970-01-01
  • 2013-07-08
  • 1970-01-01
  • 1970-01-01
  • 2013-02-22
  • 1970-01-01
  • 2020-01-20
  • 2012-07-08
  • 2015-11-13
相关资源
最近更新 更多