J'ai beaucoup de defs et de captures dans un template mako. Le rendu du template est passé à pdflatex donc la sortie de mako doit être juste. Le texte imprimé peut contenir des apostrophes ou des esperluettes et ainsi de suite. Et pour les désactiver de se tourner vers '
etc. Je dois utiliser le filtre « n » dans toutes les expressions à l'intérieur du modèle: ${text | n}
Comment désactiver tout le filtrage dans un template mako avec des captures et des defs?
J'ai essayé d'ajouter le <%page expression_filter="n" />
mais il n'a pas d'effet sur la question. D'autres filtres comme trim
fonctionnent bien avec page-tag
, mais la désactivation de tous les filtres ne fonctionne pas.
Voici ce que j'ai
<%! from bs4 import BeautifulSoup %>
<%def name='html_tag_to_latex(tag, content)' filter="trim">
% if tag == "p":
${content | n}\par{}
% elif tag == "h1":
\clearpage\section{${content | n}}
% elif tag == "h2":
\subsection{${content | n}}
% else:
${content | n}
</%def>
<%def name='html_to_latex(html_string)' filter="n,trim">
<%def name='beautifulsoup_to_latex(item)' filter="n,trim">
<% text = u'' %>
% for child in item.contents:
% try:
<% child.contents %>
<% subtext = capture(beautifulsoup_to_latex, item=child) %>
% if subtext.strip():
<%
text += capture(
html_tag_to_latex,
tag=child.name,
content=subtext.strip()
)
%>
% endif
% except AttributeError:
<% text += unicode_to_latex(child.string) %>
% endtry
% endfor
## Capture all the kids and then print out
${text | n}
</%def>
<% soup = BeautifulSoup(html_string) %>
${beautifulsoup_to_latex(soup)}
</%def>
Tous les filtres de n-pour une raison quelconque doivent être explicitement placé dans les expressions secondaires. L'ajout du filtre n dans defs n'a aucun effet; filter="n,trim"
ou filter="n"
ne fait rien. Et ceci, pour une raison quelconque, n'affecte que les apostrophes.
La méthode unicode_to_latex
effectue une vérification de dictionnaire pour transformer les codes Unicode en balisage LaTeX, par exemple. &
->\&
. Cela fonctionne bien, mais mako le transforme en \&
. Les lettres scandinaves äåö
sont affichées telles quelles, de sorte que le filtre entity
n'est pas utilisé.
La seule solution est-elle vraiment d'ajouter le | n
à toutes les expressions? C'est le seul qui fonctionne pour une raison quelconque. Pourquoi ne puis-je pas utiliser le filtre expression_filter?
Édition: A noté que la ligne ${beautifulsoup_to_latex(soup)}
n'a pas besoin de désactiver filterin. seulement à l'intérieur des expressions de méthodes html_tag_to_latex
et html_to_latex
ont besoin de cela.