夹层4.2.2 / 4.2.3:当USE_MODELTRANSLATION = True时搜索中断

时间:2017-09-13 02:09:18

标签: django mezzanine django-modeltranslation

我一直在尝试使用django-modeltranslation让我的搜索功能在我的夹层项目上正常工作。我对Django,Mezzanine和Python都很陌生,所以我没有意识到为什么我难以解决这个问题。

我的翻译工作正常。没问题。但是,每次我在settings.py中设置USE_MODELTRANSLATION = True并执行搜索查询时,我每次都会重新定向到我的主页,而不是预期的搜索结果页面,而在我的控制台输出中,我会看到{{ 1}}。

对于后者,如果我设置"POST /i18n/ HTTP/1.1" 302 0并执行搜索查询,我会得到预期的搜索结果,并在我的输出中USE_MODELTRANSLATION = False

我还注意到每个POST也在标题中传递"GET /search/?q=test HTTP/1.1" 200 12972参数,我怀疑它是问题的一部分。我还怀疑我的urls.py存在一些问题,并尝试了许多特定于搜索网址的组合,但也没有任何运气。我几乎可以肯定问题可能在于模型转换language

到目前为止,我已经使用以下组合测试了我的场景但没有解决方法:

  1. Mezzanine 4.2.3 | Dango 1.11 | django-modeltranslation 0.12
  2. Mezzanine 4.2.0 | Dango 1.10 | django-modeltranslation 0.12
  3. Mezzanine 4.1.0 | Dango 1.10 | django-modeltranslation 0.11
  4. Mezzanine 4.0.1 | Dango 1.9.12 | django-modeltranslation 0.11
  5. Mezzanine 4.2.2 | Dango 1.10.8 | django-modeltranslation 0.12 (目前在此上)
  6. 我还在当前设置中包含了以下修补程序,因为我遇到了同步翻译字段和运行set_language的问题:

    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推荐的字段所需的内容:

    python manage.py createdb

    我的设置包括:

    • Mezzanine 4.2.2
    • Django 1.10.8
    • Python 2.7.12
    • PostgreSQL 9.5.8
    • Linux 4.10.0-33-generic

    相关settings.py:

    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)
    

    urls.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("/"))
    

    环境:

    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"
    

    如果您需要任何其他信息,请与我们联系。

1 个答案:

答案 0 :(得分:0)

我终于明白了!不幸的是,我花了一段时间......

我放弃了整个事情,直到我跳回到绝望的坑中,意识到我在USE_MODELTRANSLATION = True时打破了我的所有表格。

我发现<form>标记未在我的hack-ish </form>中关闭,如此&gt;&gt;&gt; templates/includes/language_selector.html。然后它转移到我在base.html页脚中放置的搜索表单。这是我在settings.py。{/ p>中USE_MODELTRANSLATION = True时遇到问题的主要原因

吸取的教训...... 在发布前双重检查所有内容!!!

我最诚挚的向那些试图浪费时间的人道歉,就像我在调查这个时一样,只是发现django_modeltranslation或夹层没有任何错误。

<facepalm />