在django中渲染乳胶/ mathjax方程

问题描述 投票:3回答:2

我想做的第一件事是profusely感谢所有花时间阅读本文的人。该帖子看起来很长,但这主要是因为我用要点格式对其进行了格式化,并且我希望尽可能详细,并提供一个最小的工作示例。这是我第一次从事独立的编码项目,也是我的第一个Stack Exchange职位,因此即使我检查不违反任何规则,也可能错过了一些东西。

我正在做我的第一个django项目(应该是一个简单的博客),我认为我遇到了许多未知的未知数。我想要:-在我使用的文章模板中渲染[; \ LaTeX]样式的数学公式。模板是一个HTML文件,可以找到源代码here。它扩展了this base template

我已经尝试过

至此,我感到绝望。然后,我尝试了:

  • 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基于所有这些,我有一些问题希望大家能帮助我。
    1. 假设您想在python中做某事。您在github上发现了一个随机软件包,声称可以为您完成此操作,但是您从未听说过它,并且两年内都没有更新。你相信吗如果项目/目标要求使用的软件包不是您知道可以信任的规范软件包(例如numpy)之一,该如何为项目/目标选择软件包?
    2. 为什么MathJax是将乳胶样式方程式合并到网站/ HTML / CSS的最佳方法
    3. 我觉得第一个软件包应该有用,也许我在虚拟环境中犯了一个错误。有没有办法确认这一点(对不起,我知道这很模糊)
    4. 最重要:鉴于我已经尝试了很多不同的东西,但没有一个起作用,我该如何确定下一步是什么。我的模板是HTML文件的事实是否应该指导我?
    5. 如果我的困境的答案在MathJax文档或Django文档中,我将如何有效地进行搜索?
python django python-3.x latex mathjax
2个回答
0
投票

恭喜您发表了第一篇SO帖子。我想说的是,您是在提问题的时候钉上钉子的nitpick,我将内联代码。

[不幸的是,现在main mirror that mathjax advertises from Cloudflare似乎无法访问(给我一个403),所以可能是引起您的问题。

Django模板呈现HTML,最终您只是呈现HTML页面。尝试在浏览器中本地运行以下HTML文件。它应该工作。 Django对模板所做的所有工作都是动态注入我在此处进行硬编码的主体:本质上,您只需要呈现一个字符字段(而不是硬编码),就可以了。

<html>
<head>
  <script type="text/javascript" id="MathJax-script" async
    src="https://cdn.jsdelivr.net/npm/[email protected]/es5/tex-mml-chtml.js">
  </script>
</head>
<body>
  $$x=\frac{-b+\sqrt{b^2-4ac}}{2a}$$
</body>
</html>

[您在github上找到了一个随机软件包,声称可以为您完成此操作,但是您之前从未听说过,它已经有两年没有更新了。你相信吗

这实际上是一个棘手的问题,如果有人出现并给出明确的答案,我将感到惊讶。我会视具体情况而定。在这种情况下,如果您深入研究源代码,则基本上整个库就是此one file。该库实际上只是注入mathjax脚本。因此,简而言之,在这种情况下,我不会打扰图书馆。


0
投票

我冒着在一个方面扩展模板文件的风险。 Django没有提供通用的基本模板可能很可惜,如果它不能满足自己的需求,则必须积极替换。早晚都需要一个,如果安装Django给您提供了一个规范的版本,并且所有初学者教程都使用了它,那就太好了。

无论如何,以Kent Shikama的回答,我的网站用于生成他的html的模板看起来像

{% extends "base.html" %}

{% block extrascripts %}
  <script type="text/javascript" id="MathJax-script" async
    src="https://cdn.jsdelivr.net/npm/[email protected]/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中的块scripts中。这样,您的模板将仅包含content块,并且可以自由使用MathJax。

关键是,您的特定页面模板仅需要包含与项目中每个页面所使用的脚本和样式不同的脚本和样式。然后,只需更改该基本html,即可重新设置整个网站的样式。

在现实世界中,扩展base.html并依次由单个页面模板扩展的中间级别的模板很常见,因此可以指定整个页面类别,而无需重复。

© www.soinside.com 2019 - 2024. All rights reserved.