Я новичок здесь. В течение одного месяца go я начал учить Django. Моей целью было создать веб-приложение: набор математических вопросов. Пользователь может создавать новые вопросы и фильтровать вопросы относительно топи c и уровня сложности. Вчера я решил включить предварительный просмотр для textarea, например, предварительный просмотр в stackoverflow. После поиска в Google я нашел markdownx. Он отображает текст и все теги html, но не математические формулы (см. Рисунок). пример проблемы Я использую mathjax для визуализации математических формул. Если я положу, например, x ^ 2 между \( ... \)
, он исчезнет. Та же проблема с $$...$$
. Кто-нибудь знает, как решить эту проблему?
Ниже вы можете найти мои settings.py, models.py и шаблон.
settings.py
INSTALLED_APPS = [
'question.apps.QuestionConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'multiselectfield',
'latexify',
'django_filters',
'mathpool',
'rest_framework',
'markdownx',
'markdown',
]
MARKDOWNX_MARKDOWNIFY_FUNCTION = 'markdownx.utils.markdownify'
MARKDOWNX_MARKDOWN_EXTENSIONS = [
'markdown.extensions.extra',
'mdx_math',
'markdown.extensions.sane_lists',
'markdown.extensions.nl2br',
]
models.py
from django.db import models
from multiselectfield import MultiSelectField
from django.contrib.auth import get_user_model
from django.urls import reverse
from markdownx.models import MarkdownxField
YEARS = (
(3, '3'), (4, '4'), (5,'5'), (6, '6'), (7, '7'), (8, '8'), (9, '9'), (10, '10'),
)
POINTS = [
('1', '1'), ('2', '2'), ('3','3'), ('4', '4'), ('5', '5'),
]
CATEGORY = [
('Zahlen', 'Zahlen'),
('Prozentrechnung', 'Prozentrechnung'),
('Geometrie', 'Geometrie'),
('Bruchrechnung', 'Bruchrechnung'),
('Gleichungen', 'Gleichungen'),
('Funktionen', 'Funktionen'),
('Trigonometrie', 'Trigonometrie'),
('Kombinatorik', 'Kombinatorik'),
('Wahrscheinlichkeiten', 'Wahrscheinlichkeiten'),
]
ROUND = [
('Vorrunde', 'Vorrunde'),
('Zwischenrunde', 'Zwischenrunde'),
('Finalrunde', 'Finalrunde'),
]
class Question(models.Model):
question_id = models.AutoField('ID', primary_key = True)
question_creation_date = models.DateTimeField('Erstellungsdatum', auto_now_add=True,)
question_text = MarkdownxField('', blank=False)
question_distractor_a = models.CharField('', max_length=100, blank=True)
question_distractor_b = models.CharField('', max_length=100, blank=True)
question_distractor_c = models.CharField('', max_length=100, blank=True)
question_distractor_d = models.CharField('', max_length=100, blank=True)
question_distractor_e = models.CharField('', max_length=100, blank=True)
question_solution = models.CharField('', max_length=100, blank=True)
question_points = models.CharField('Punkte', max_length=1, choices=POINTS, default='')
question_year = MultiSelectField('Klasse', choices=YEARS, max_choices=8)
question_category = models.CharField('Themengebiet', max_length=50, choices=CATEGORY, blank=True,
default='')
question_image = models.FileField('Bild', upload_to = 'media/', default='', blank=True)
question_round = models.CharField('Runde', max_length=15, choices=ROUND, blank=True)
def __str__(self):
return str(self.question_id)
class Comment(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE, related_name='comments')
comment = models.TextField('')
user = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
date = models.DateTimeField(auto_now_add=True)
parent = models.ForeignKey('self', on_delete=models.CASCADE, null=True, blank=True,
related_name='replies')
class Meta:
ordering = ['date']
def __str__(self):
return self.comment
def get_absolute_url(self):
return reverse('question_detail', kwargs= {'pk': self.pk})
template
<!DOCTYPE html>
{% load stati c%} {% load latexify%}
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- font style -->
<link href='https://fonts.googleapis.com/css?family=Quicksand' rel='stylesheet'>
<!-- static file -->
<link rel="stylesheet" href="{% static 'style.css' %}" type="text/css">
<!-- Latexify -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.6.0/katex.min.css">
<!-- tikzjax -->
<link rel="stylesheet" type="text/css" href="http://tikzjax.com/v1/fonts.css">
{% endblock link %}
<script src="http://tikzjax.com/v1/tikzjax.js"></script>
<!-- Mathjax -->
<script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script>
<script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js">
</script>
<!-- jQuery -->
<script src="https://code.jquery.com/jquery-3.4.1.js" integrity="sha256-
WpOohJOqMqqyKL9FccASB9O0KwACQJpFTUBLTYOVvVU="
crossorigin="anonymous"></script>
<title>index</title>
</head>
<main class="container" style="min-height: 100vh;">
<form action="" enctype="multipart/form-data" method="post">{% csrf_token %}
{{ form.as_p }}
{{ form.errors }}
{{ form.non_field_errors }}
<input class="button" type="submit" value="Aufgabe einreichen" style="width: 100%;">
</form>
{{ form.media }}
</main>
</html>
Большое спасибо!