我想做的第一件事就是衷心感谢所有花时间阅读本文的人。这篇文章看起来很长,但这主要是因为我用要点格式化了它,我想尽可能详细并提供一个最小的工作示例。这是我第一次开始独立的编码项目,也是我的第一篇 Stack Exchange 帖子,因此即使我检查了没有违反任何规则,我也可能错过了一些东西。
我正在开发我的第一个 django 项目(应该是一个简单的博客),我想我遇到了很多未知的情况。 我想要: - 在我正在使用的文章模板中渲染 [;\LaTeX] 样式的数学公式。模板是一个HTML文件,源代码见here 。它延伸this base template
我已经尝试过
- the django-mathjax包裹。在我按照说明操作但我的项目未编译后,我厌倦了 this stack exchange post 中的建议没有效果。
- 代码来自this youtube video ,我创建了一个sample html file that did what I wanted但当我将它添加到项目中的 base_layout 模板时,它就崩溃了。
此时我已经绝望了。然后我尝试了:
- django-tex
- django-latexify
- I read this stack exchange post and it almost made sense
- this post in /r/django which does say to use mathjax, but I unfortunately have been failing at this so far
基于此,我有一些问题希望大家能够帮助我解决。
- 假设你想用 python 做一些事情。你在 github 上找到一个随机包,声称可以为你做这件事,但你以前从未听说过它,它已经 2 年没有更新了。你相信它吗?如果项目/目标需要使用的包不是您知道可以信任的规范包(例如 numpy)之一,您如何为项目/目标选择包?
- 为什么 MathJax 是将 Latex 样式方程合并到网站/HTML/CSS 的最佳方式
- 我觉得第一个包应该可以工作,也许我在虚拟环境中犯了一个错误。有没有办法确认这一点(抱歉,我知道这非常模糊)
- 最重要的是:鉴于我尝试了很多不同的方法,但没有一个有效,我该如何辨别下一步是什么。我的模板是 HTML 文件这一事实应该指导我吗?
- 如果我的困境的答案在 MathJax 文档或 Django 文档中,我将如何有效地搜索它?
最佳答案
我将冒险扩展模板文件的一方面。也许遗憾的是 Django 没有提供通用的基本模板,如果它不能满足人们的需求,人们就必须主动替换它。迟早人们会需要一个,如果安装 Django 能给你一个规范的,并且所有初学者教程都使用它,那就太好了。
无论如何,采用 Kent Shikama 的回答,我的网站用于生成他的 html 的模板看起来像
{% extends "myproject/base.html" %}
{% block extrascripts %}
<script type="text/javascript" id="MathJax-script" async
src="https://cdn.jsdelivr.net/npm/mathjax@3.0.0/es5/tex-mml-chtml.js">
</script>
{% endblock extrascripts %}
{% block content %}
$$x=\frac{-b+\sqrt{b^2-4ac}}{2a}$$
{% endblock content %}
至于那个 base.html 可能是什么,一个简单的,会产生该答案中的 html 加上几个 HTML 注释,将是
<html>
<head>
{% block scripts %}
<!-- put here any scripts (such as JQuery ) that you want to be loaded
UNLESS the specific template requires otherwise
by overriding this block. Add scripts via extrascripts below.
-->
{% endblock scripts}
{% block extrascripts %}{%endblock extrascripts%}
{% block css %}
<!-- put here any CSS styling you want to be loaded
UNLESS the specific template requires otherwise,
by overriding this block. Add extra styling via extracss below.
-->
{% endblock css %}
{% block extracss %}{% endblock extracss %}
</head>
<body>
{% block content %}{% endblock content %}
</body>
</html>
如果这是一个数学博客项目,您很可能将这个单独模板中的 MathJax 脚本提升到 base.html 中的 block scripts
中。然后,您的模板将仅包含 content
block ,并且可以自由使用 MathJax。
关键是您的特定页面模板只需要包含与项目中每个页面使用的脚本和样式不同的脚本和样式。然后,您只需更改基本 html 即可重新设计整个网站的样式。
在现实世界中,扩展 base.html 并依次由各个页面模板扩展的中间级别模板很常见,因此可以指定整个页面类而无需重复。
关于python - 在 django 中渲染 Latex/MathJax 方程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59299591/