Reiku
@Reiku (Rei k)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Djangoでデプロイするとエラーが発生する

解決したいこと

Djangoでデプロイするとデプロイ前は問題がないのにデプロイ後にエラーが発生してしまいます。

staticファイルが読み込めていないからかもしれません。

発生している問題・エラー

Invalid block tag on line32:'translate', expected 'endblock'. Did you forget to register or load this tag?

または、問題・エラーが起きている画像をここにドラッグアンドドロップ
awgwh.png

このように{{load i18n}}タグは登録しています
スクリーンショット 0004-07-04 15.36.01.png

change_list.html
{% extends "admin/base_site.html" %}
{% load i18n admin_urls static admin_list %}

{% block extrastyle %}
  {{ block.super }}
  <link rel="stylesheet" href="{% static "admin/css/changelists.css" %}">
  {% if cl.formset %}
    <link rel="stylesheet" href="{% static "admin/css/forms.css" %}">
  {% endif %}
  {% if cl.formset or action_form %}
    <script src="{% url 'admin:jsi18n' %}"></script>
  {% endif %}
  {{ media.css }}
  {% if not actions_on_top and not actions_on_bottom %}
    <style>
      #changelist table thead th:first-child {width: inherit}
    </style>
  {% endif %}
{% endblock %}

{% block extrahead %}
{{ block.super }}
{{ media.js }}
<script src="{% static 'admin/js/filters.js' %}" defer></script>
{% endblock %}

{% block bodyclass %}{{ block.super }} app-{{ opts.app_label }} model-{{ opts.model_name }} change-list{% endblock %}

{% if not is_popup %}
{% block breadcrumbs %}
<div class="breadcrumbs">
                                                                                    エラー箇所
<a href="{% url 'admin:index' %}">{% translate 'Home' %}</a>
&rsaquo; <a href="{% url 'admin:app_list' app_label=cl.opts.app_label %}">{{ cl.opts.app_config.verbose_name }}</a>
&rsaquo; {{ cl.opts.verbose_name_plural|capfirst }}
</div>
{% endblock %}
{% endif %}

{% block coltype %}{% endblock %}

{% block content %}
  <div id="content-main">
    {% block object-tools %}
        <ul class="object-tools">
          {% block object-tools-items %}
            {% change_list_object_tools %}
          {% endblock %}
        </ul>
    {% endblock %}
    {% if cl.formset and cl.formset.errors %}
        <p class="errornote">
        {% if cl.formset.total_error_count == 1 %}{% translate "Please correct the error below." %}{% else %}{% translate "Please correct the errors below." %}{% endif %}
        </p>
        {{ cl.formset.non_form_errors }}
    {% endif %}
    <div class="module{% if cl.has_filters %} filtered{% endif %}" id="changelist">
      <div class="changelist-form-container">
        {% block search %}{% search_form cl %}{% endblock %}
        {% block date_hierarchy %}{% if cl.date_hierarchy %}{% date_hierarchy cl %}{% endif %}{% endblock %}

        <form id="changelist-form" method="post"{% if cl.formset and cl.formset.is_multipart %} enctype="multipart/form-data"{% endif %} novalidate>{% csrf_token %}
        {% if cl.formset %}
          <div>{{ cl.formset.management_form }}</div>
        {% endif %}

        {% block result_list %}
          {% if action_form and actions_on_top and cl.show_admin_actions %}{% admin_actions %}{% endif %}
          {% result_list cl %}
          {% if action_form and actions_on_bottom and cl.show_admin_actions %}{% admin_actions %}{% endif %}
        {% endblock %}
        {% block pagination %}{% pagination cl %}{% endblock %}
        </form>
      </div>
      {% block filters %}
        {% if cl.has_filters %}
          <div id="changelist-filter">
            <h2>{% translate 'Filter' %}</h2>
            {% if cl.has_active_filters %}<h3 id="changelist-filter-clear">
              <a href="{{ cl.clear_all_filters_qs }}">&#10006; {% translate "Clear all filters" %}</a>
            </h3>{% endif %}
            {% for spec in cl.filter_specs %}{% admin_list_filter cl spec %}{% endfor %}
          </div>
        {% endif %}
      {% endblock %}
    </div>
  </div>
{% endblock %}

該当するソースコード

settings.py
import os

ALLOWED_HOSTS = ["*"]


INSTALLED_APPS = [
    'polls.apps.PollsConfig',

    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

ROOT_URLCONF = 'mysite.urls'

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            os.path.join(BASE_DIR, 'templates')
        ],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

WSGI_APPLICATION = 'mysite.wsgi.application'


# Database
# https://docs.djangoproject.com/en/2.2/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}


# Password validation
# https://docs.djangoproject.com/en/2.2/ref/settings/#auth-password-validators

AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]


# Internationalization
# https://docs.djangoproject.com/en/2.2/topics/i18n/

LANGUAGE_CODE = 'ja'

TIME_ZONE = 'Asia/Tokyo'

USE_I18N = True

USE_L10N = True

USE_TZ = True


# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.2/howto/static-files/

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
    )

from django.utils.translation import gettext_lazy as _
LANGUAGES = [
    ('ja', _('Japanese')),
    ('en', _('English')),
]

LOCALE_PATHS = [os.path.join(BASE_DIR, 'locale')]


0

1Answer

{% load i18n admin_urls ~~

にカスタムタグ・フィルターは含まれますか??

あとは、{% blocktrans %}が閉じられていないとかですかね??

0Like

Comments

  1. @Reiku

    Questioner

    すみませんカスタムフィルタはこの場合具体的にはどのような記述でしょうか。

    <a href="{% url 'admin:index' %}">{% translate 'Home' %}</a>
    このように記述しています。
  2. カスタムフィルタはRさんが独自に作ったものですが違うみたいですね〜

    エラー
    Invalid block tag on line32:'translate', expected 'endblock'. Did you forget to register or load this tag?

    とあるので、カスタムタグ・フィルタが読み込めてないか、閉じられてないかだと思いました。

    Line32のエラーが何なのか気になるところです!

    開発環境では上手くいき、本番環境で上手くいかないのも気になります(´-`).。oO
  3. @Reiku

    Questioner

    こちらを記述しているHTMLはDjango公式のGitHubのソースコードをそのまま使用しました。
    それを質問の方に追加しました。

    知識不足で申し訳ございません。
  4. adminページのカスタマイズをしてるんですね!

    i18nが読み込めてない?ので関係ないのかもしれませんが、このページは参考になりますか?

    https://qiita.com/cnloni/items/9d3ed9394c2ad935d1f7

    {% result_list cl %}がカスタムタグのようです。
  5. @Reiku

    Questioner

    ご丁寧にありがとうございます。
    https://github.com/django/django/tree/main/django/contrib/admin
    {DJANGO_DIR}/contrib/admin/ 以下を プロジェクト直下にコピーペーストするということでしょうか。
    記事を読んだところ{% result_list cl %}こちらが登録されていないことがだいたいわかりました。

    記事を読んでいてところどころわからないところがあり、自分のレベルに見合っていないと思いました。
    申し訳ございません。
  6. もし目的がadminページのカスタマイズであればテンプレートのコピーが必要になると思います。

    私の方こそお役に立てず申し訳ないです。

    今までi18nの読み込みエラー?に出会ったことがなかったので解決策がとても気になります。
  7. @Reiku

    Questioner

    はい。NOIZE様の仰られるように目的はadminページのカスタマイズで追加ページを追加すると言うものです。

    力不足で申し訳ございません。

    そうなんですよ、色々調べたのですがそのような例があまりなくて、

    現段階では力不足なのでまた練習してからこちらまた取り組もうかなって考えています。もしNOIZE様が解決法を見つけられましたらまたこちらに書いていただいてもよろしいでしょうか。
    私も解決しだいすぐにこちらに記述いたします。
  8. 追加ページを追加とはどういったものになるのでしょうか?

    モデルの追加とは違うんですもんね??

    私の勉強のためにも、もし差し支えなければ教えていただけると嬉しいです!
  9. リンク先拝見させて頂きました!

    私も既存のadminページに「追加ページ」のリンクを表示させるところまでやってみたのですが、同様のエラーは再現できませんでした汗(正常に実装できたようです)

    上記のchange_list.htmlをコピペしたので、エラーの謎は深まるばかりです汗
  10. @Reiku

    Questioner

    わざわざ再現してくださったのですね!
    本当にありがとうございます!
    デプロイしてもエラーが出なかったでしょうか?
    私もまた時間のある時にチャレンジしてみます!!
  11. あ、本番環境でしたね汗
    私はrunserverの開発環境までしかやってないですすいません汗
  12. @Reiku

    Questioner

    そうなんですよね〜
    runserverの開発環境では問題がないのに
    本番環境だとなぜだかエラーが出てしまうんですよ笑笑
  13. Djangoのバージョン2.2なんですね!
    translateのタグは3.1からで、transの上位互換みたいです。

    Djangoのバージョンが古い状態でtranslateを使うとエラーがでるようなので、もしかしたら「trans」に書き換えたらうまくいくかもしれません。

    https://stackoverflow.com/questions/63343618/templatesyntaxerror-at-admin-invalid-block-tag-on-line-23-translate-expect

    https://docs.djangoproject.com/en/3.2/topics/i18n/translation/#translate-template-tag
  14. @Reiku

    Questioner

    Djangoのバージョンは今確認したところ4.0.3でした!

    新しいので「trans」は関係ないですかね...
  15. そうでしたか!
    上の画像で2.2となっていたので思い込みでしたすいません汗
  16. @Reiku

    Questioner

    確認していただいありがとうございます!
    python -m django --version こちらのコマンドだと4.0.3になったのですが、デプロイ後はバージョンが変わるということってあるんですかね?
    もしそうでしたらその関係で、translate タグが読み込めていないのかもしれませんね!
  17. requirements.txtのDjangoが2.2だったら変わるかもですね!

    でもpip freeze > requirements.txtしてると思うんで大丈夫だとは思うのですが、、、確認してみるのも良いかもですね!
  18. @Reiku

    Questioner

    venv環境で実行できていなかったのでもしかしたらそちらが原因かもしれないです!

Your answer might help someone💌