0

DjangoにSHPAML(Pythonの場合はHAML)を使用していますが、一部のブロックをオーバーライドするときに空白の問題が発生するため、SHPAML->HTMLの変換で問題が発生します。例を次に示します。

skeleton.shpaml内:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>{{ title }}</title>

        {% comment %}
        <link rel="shortcut icon" href="/static/images/favicon.ico" type="image/x-icon"/>
        {% endcomment %}

        {% if css_list %}
            {% for css in css_list %}
            <link type="text/css" rel="stylesheet" href="{{css_relative}}{{ css }}">
            {% endfor %}
        {% endif %}

        {% if js_list %}
            {% for js in js_list %}
            <script type="text/javascript" src="{{js_relative}}{{ js }}">
            </script>
            {% endfor %}
        {% endif %}

        {% if no_cache %}
        <meta http-equiv="Pragma" content="no-cache" />
        <meta http-equiv="Cache-Control" content="no-cache" />
        {% endif %}

    </head>

    body
        #nonFooter
            #content
                {% block header %}&nbsp;{% endblock %}
            #maincontent
                {% block content %}&nbsp;{% endblock %}
        #footer
            &nbsp;

</html>

index.shpaml内:

{% extends "includes/skeleton.shpaml" %}
{% block content %}
asd
.test
    .test2 | meh
{% endblock %}

結局、私の出力はこれです:

!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Home | Zineified</title>





            <link type="text/css" rel="stylesheet" href="/media/css/base.css">





            <script type="text/javascript" src="/media/js/jquery-1.3.2.min.js">
            </script>

            <script type="text/javascript" src="/media/js/jquery.form.js">
            </script>

            <script type="text/javascript" src="/media/js/base.js">
            </script>





    </head>

    body
        #nonFooter
            #content
                &nbsp;
            #maincontent

asd
.test
    .test2 | meh

        #footer
            &nbsp;

</html>

ご覧のとおり、ブロックには空白が保持されていません。index.shpamlの次の行は、skeleton.shpamlの次の行に直接移動します。これを防ぎ、テンプレートの拡張によって空白を保持するにはどうすればよいですか?

4

4 に答える 4

1

ドキュメントから:

スペースレス

HTMLタグ間の空白を削除します。これには、タブ文字と改行が含まれます。

使用例:

{% spaceless %}
    <p>
        <a href="foo/">Foo</a>
    </p>
{% endspaceless %}

この例では、次のHTMLが返されます。

<p><a href="foo/">Foo</a></p>

タグ間のスペースのみが削除されます。タグとテキスト間のスペースは削除されません。

余分なスペース/改行を手動で削除することもできますが、それではテンプレートの読みやすさが低下します。

于 2010-01-04T21:50:16.903 に答える
1

SHPAML プリプロセッサが Django の前に呼び出されていないようです。私が通常行っていることは、すべてのドキュメントを .shpaml 拡張子の SHPAML で記述し、それらを .html 拡張子の Django に変換してから、Django に魔法をかけてもらうことです。したがって、「extends」や「include」などのステートメントで、前処理済みの .html ドキュメントを参照する必要があります。

基本の shpaml ドキュメントは次のようになります。

html
    体
        #メインページ
            {% ブロック体 %}
            {% エンドブロック %}

そして、それを拡張するドキュメントは次のようになります。

{% 拡張 'base.html' %}
{% ブロック体 %}
    p
        これは {{ 本 }} についての段落です...
{% エンドブロック %}

そして、Django がそれらを見る前に、それらを前処理したいとします。通常、「manage.py runserver」を実行する直前に Python スクリプトで前処理します。

于 2010-01-04T22:25:54.627 に答える
0
           #maincontent

asd

ここでミスアライメントを意味しますか?それに応じて、index.shpamlを調整します。

{% extends "includes/skeleton.shpaml" %}
{% block content %}
            asd
            .test
                .test2 | meh
{% endblock %}
于 2010-01-04T22:16:09.497 に答える