Настройка форм Django Crispy для отформатированного пользовательского ввода (отформатированного пользователем) - PullRequest
0 голосов
/ 25 мая 2019

В проекте Django я использовал хрустящие формы, чтобы сгенерировать форму, чтобы пользователь мог ввести заголовок и комментарий. В разделе комментариев я бы хотел, чтобы пользователь мог форматировать ввод (например, добавлять теги жирным шрифтом и курсивом, а также вставлять видео на YouTube, поэтому используйте фрагменты для вставки). Это типично для виджета WordPress (администратора), который позволяет форматирование текста для любой записи текста. Возможно ли это сделать с помощью хрустящих форм Джанго, и если да, то как лучше всего двигаться вперед? Я ищу предложения для документации, импорта (какие-либо существующие библиотеки, совместимые с Django?), Как я не мог найти, или идеи относительно того, как реализовать это вручную. например в частности, в каком «файле» это будет реализовано. Просмотр HTML-страницы (текущей) Просмотр текущей формы и ввод текста в области комментариев.

Я смотрел на другие вопросы-ответы, но никто не отвечает на это специально.

Это функция, которую я хотел бы добавить к вводу текста в форму (только для поля содержимого / комментария)

Добавлены желаемые параметры форматирования ввода текста

Текущий post_form.html код ниже

{% extends "socialmedia/base.html" %}
{% load crispy_forms_tags %}
{% block content %}
    <div class="content-section">
        <form method="POST">
        {% csrf_token %}
        <fieldset class="form-group">
            <legend class="border-bottom mb-4">Post your message</legend>
            {{form|crispy}}
        </fieldset>
    <div class="form-group">
        <button class="btn btn-outline-info" type="submit">Post</button>
    </div>
    </form>
</div>
{% endblock content %}

post_detail.html

{% extends "socialmedia/base.html" %}
{% block content %}

    <article class="media content-section">
        <img class="rounded-circle article-img" src="{{object.author.profile.image.url}}">
    <div class="media-body">
        <div class="article-metadata">
      <a class="mr-2" href="{% url 'user-posts' object.author.username %}">{{ object.author }}</a>
      <small class="text-muted">{{ object.date_posted|date:"F d, Y"}}</small>
      {% if object.author == user %}
        <div>
            <a class="btn btn-secondary btn-sm mt-1 mb-1" href="{% url 'post-update' object.id %}"> Update </a>
            <a class="btn btn-danger btn-sm mt-1 mb-1" href="{% url 'post-delete' object.id %}"> Delete </a>
        </div>
      {% endif %}


        </div>
    <h2 class="article-title">{{ object.title }}</h2>
    <p class="article-content">{{ object.content }}</p>
  </div>
</article>
{% endblock content %}

models.py (относится к форме)

from django.db import models
from django.utils import timezone #don't forget to add this
from django.contrib.auth.models import User
from django.urls import reverse


class Post(models.Model):
    title=models.CharField(max_length=100)
    content=models.TextField(max_length=300)
    date_posted=models.DateTimeField(default=timezone.now) 

views.py (снова относится к форме)

from django.shortcuts import render,get_object_or_404
from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
from django.contrib.auth.models import User
from .models import Post #import the Models Post
from django.views.generic import (
    ListView,
    DetailView,
    CreateView,
    UpdateView,
    DeleteView
)


from django.http import HttpResponse
# Create your views here.



class PostListView(ListView):
    model = Post #what model to query in order to create the list
    template_name = 'socialmedia/home.html' 

    context_object_name = 'posts'
    ordering = ['-date_posted']#the minus sign before the -date_posted makes it newest first
    paginate_by = 10

class UserPostListView(ListView):
    model = Post #what model to query in order to create the list
    template_name = 'socialmedia/user_posts.html' 
    context_object_name = 'posts'
    paginate_by = 10    

    def get_queryset(self):
        user = get_object_or_404(User, username=self.kwargs.get('username'))
        return Post.objects.filter(author=user).order_by('-date_posted')



class PostDetailView(DetailView):
    model = Post 


class PostCreateView(LoginRequiredMixin,CreateView):

    model = Post 
    fields=['title','content']


    def form_valid(self,form):
        form.instance.author = self.request.user #set author to current loggged in user
        return super().form_valid(form)


class PostUpdateView(LoginRequiredMixin,UserPassesTestMixin, UpdateView):
        model = Post 
        fields=['title','content']

        def form_valid(self,form):
            form.instance.author = self.request.user 
            return super().form_valid(form)
        #this only lets the user of the post update the post.....
        def test_func(self):
            post = self.get_object() #this gets the current post
            if self.request.user == post.author:
                return True
            return False

class PostDeleteView(LoginRequiredMixin,UserPassesTestMixin, DeleteView):
    model = Post 
    success_url = '/'
    def test_func(self):
        post = self.get_object() #this gets the current post
        if self.request.user == post.author:
            return True
        return False
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...