我一直在尝试使用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
。
到目前为止,我已经使用以下组合测试了我的场景但没有解决方法:
我还在当前设置中包含了以下修补程序,因为我遇到了同步翻译字段和运行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
我的设置包括:
相关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"
如果您需要任何其他信息,请与我们联系。
答案 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 />