0

django-modeltranslation を使用して、メザニン プロジェクトで検索機能を正しく動作させるためにかなりの時間を費やしてきました。私は Django、Mezzanine、および Python にかなり慣れていないので、この問題を理解するのが難しい理由について驚くことはありません。

私の翻訳はうまくいきます。そこに問題はありません。ただし、USE_MODELTRANSLATION = Truesettings.py に設定して検索クエリを実行するたびに、予想される検索結果ページではなく、毎回ホームページにリダイレクトされ、コンソール出力に が表示されます"POST /i18n/ HTTP/1.1" 302 0

後者の場合USE_MODELTRANSLATION = False、検索クエリを設定して実行すると、期待される検索結果が出力されます"GET /search/?q=test HTTP/1.1" 200 12972

また、各 POST がヘッダーにパラメーターを渡していることにも気付きlanguageましたが、これが問題の一部であると思われます。また、urls.py に問題があるのではないかと疑い、検索 URL に固有の多くの組み合わせを試みましたが、それもうまくいきませんでした。問題が modeltranslation にある可能性はほぼ確実ですset_language

これまでのところ、次の組み合わせでシナリオをテストしましたが、解決できませんでした:

  1. メザニン 4.2.3 | ダンゴ 1.11 | django-modeltranslation 0.12
  2. メザニン 4.2.0 | ダンゴ 1.10 | django-modeltranslation 0.12
  3. メザニン 4.1.0 | ダンゴ 1.10 | django-modeltranslation 0.11
  4. メザニン 4.0.1 | ダンゴ 1.9.12 | django-modeltranslation 0.11
  5. メザニン 4.2.2 | ダンゴ 1.10.8 | django-modeltranslation 0.12 (現在はこちら)

翻訳フィールドの同期と実行中に問題が発生したため、現在のセットアップに次のパッチも含めましたpython manage.py createdb

https://github.com/stephenmcd/mezzanine/commit/c244b603a6efab5062dcf97b1e12227e61ba4fb8 https://github.com/stephenmcd/mezzanine/pull/1764/files

Mezzanine と django-modeltranslation を使用して検索機能を解決するために誰かが私を正しい方向に向けることができれば、それは非常に高く評価されます!


現時点では、この問題を理解しようとしているだけなので、models.py と views.py はむき出しです。とにかく派手なことはしていません。

translation.py を使用して、古いインポートをクリーンアップする必要がありますが、現在、pinax の証言のフィールドを翻訳するために必要なものしかありません。

from modeltranslation.translator import translator, TranslationOptions
from mezzanine.core.translation import (TranslatedDisplayable, TranslatedRichText)
from mezzanine.pages.models import Page
from mezzanine.core.models import RichText, Orderable, Slugged
from modeltranslation.translator import translator, TranslationOptions
from django.db import models
from pinax.testimonials.models import Testimonial
from django.utils import timezone

## Pinax Testimonials
class TranslatedTestimonial(TranslationOptions):
    fields = ('text', 'author', 'affiliation')

translator.register(Testimonial, TranslatedTestimonial)

私のセットアップには以下が含まれます:

  • メザニン 4.2.2
  • ジャンゴ 1.10.8
  • パイソン 2.7.12
  • PostgreSQL 9.5.8
  • Linux 4.10.0-33 ジェネリック

関連する settings.py:

USE_I18N = True
USE_L10N = True

LANGUAGE_CODE = "en"

# Supported languages
LANGUAGES = (
    ('en', _('English')),
    ('es', _('Spanish')),
)

## ModelTranslation Settings
USE_MODELTRANSLATION = True

MODELTRANSLATION_LANGUAGES = ('en', 'es')

## Search Model
SEARCH_MODEL_CHOICES = None

#########
# PATHS #
#########
## Custom Theme Path
THEME_URL = "theme1/"

# Full filesystem path to the project.
PROJECT_APP_PATH = os.path.dirname(os.path.abspath(__file__))
PROJECT_APP = os.path.basename(PROJECT_APP_PATH)
PROJECT_ROOT = BASE_DIR = os.path.dirname(PROJECT_APP_PATH)

## L10n Path
LOCALE_PATHS = (os.path.join(PROJECT_ROOT + THEME_URL + "/locale/"),)
STATIC_URL = "/static/"
STATIC_ROOT = os.path.join(PROJECT_ROOT, THEME_URL, STATIC_URL.strip("/"))
MEDIA_URL = THEME_URL + STATIC_URL + "media/"
MEDIA_ROOT = os.path.join(PROJECT_ROOT, *MEDIA_URL.strip("/").split("/"))

urls.py:

from __future__ import unicode_literals

from django.conf.urls import include, url
from django.conf.urls.i18n import i18n_patterns
from django.contrib import admin
from django.views.i18n import set_language
from mezzanine.core.views import direct_to_template
from mezzanine.conf import settings

admin.autodiscover()

urlpatterns = i18n_patterns(
    url("^admin/", include(admin.site.urls)),
)

if settings.USE_MODELTRANSLATION:
    urlpatterns += [
        url('^i18n/$', set_language, name='set_language'),
    ]

urlpatterns += [
    url("^$", direct_to_template, {"template": "index.html"}, name="home"),
    url("^portfolio/$", direct_to_template, {"template": "portfolio.html"}, name="portfolio"),
    url("^about/$", direct_to_template, {"template": "about.html"}, name="about"),
    url("^services/$", direct_to_template, {"template": "services.html"}, name="services"),
    url("^pricing/$", direct_to_template, {"template": "pricing.html"}, name="pricing"),

    # ``mezzanine.urls``.
    url("^", include("mezzanine.urls")),

]

handler404 = "mezzanine.core.views.page_not_found"
handler500 = "mezzanine.core.views.server_error"

環境:

beautifulsoup4==4.6.0
bleach==1.5.0
certifi==2017.7.27.1
chardet==3.0.4
Django==1.10.8
django-appconf==1.0.2
django-contrib-comments==1.8.0
django-meta==1.4
django-modeltranslation==0.12
filebrowser-safe==0.4.7
future==0.16.0
grappelli-safe==0.4.7
html5lib==0.9999999
idna==2.6
Mezzanine==4.2.2
oauthlib==2.0.3
olefile==0.44
Pillow==4.2.1
pinax-testimonials==1.0.5
psycopg2==2.7.3.1
pytz==2017.2
requests==2.18.4
requests-oauthlib==0.8.0
six==1.10.0
tzlocal==1.4
urllib3==1.22
webencodings==0.5.1

追加情報が必要な場合はお知らせください。

4

1 に答える 1