我正在开发一个 django 多语言应用程序并使用 django-modeltranslation 来翻译模型。它工作得很好,除了一件事:当翻译不可用特定语言时,它仍然显示对象(比如说帖子)。我有一些帖子在塔吉克语中可用,而在俄语中不可用,反之亦然。
我的目标是禁止以我没有翻译的语言显示帖子。可能是通过显示 404 或任何其他方式,但它根本不应该显示帖子,而不是部分显示
这是我的设置:settings.py
LANGUAGES = [
('ru', _('Russian')),
('tg', _('Tajik')),
# ('en', _('English')),
]
EXTRA_LANG_INFO = {
'tg': {
'bidi': False,
'code': 'tg',
'name': 'Tajik',
'name_local': u'Тоҷикӣ',
},
}
# Add custom languages not provided by Django
LANG_INFO = dict(list(django.conf.locale.LANG_INFO.items()) + list(EXTRA_LANG_INFO.items()))
django.conf.locale.LANG_INFO = LANG_INFO
global_settings.LANGUAGES = global_settings.LANGUAGES + [("tg", 'Tajik')]
LANGUAGE_CODE = 'ru'
# from modeltranslation.settings import ENABLE_REGISTRATIONS
MODELTRANSLATION_LANGUAGES = ('tg','ru')
MODELTRANSLATION_DEFAULT_LANGUAGE = ('tg')
MODELTRANSLATION_FALLBACK_LANGUAGES = ('ru', 'tg')
翻译.py
from modeltranslation.translator import translator, TranslationOptions
from blog.models import Post, Matlab
class BlogPostTranslationOptions(TranslationOptions):
fields = ('Title', 'ShortDesc', 'Content')
translator.register(Post, BlogPostTranslationOptions)
模型.py:
class Post(models.Model):
STATUS_CHOICES = (
('draft', 'Черновик'),
('published', 'Опубликованно'),
)
POST_TYPE_CHOICES = (
('image', 'Image'),
('video', 'Video'),
)
Title = models.CharField("Заголовок публикации", blank=True, max_length=250, help_text="Введите заголовок публикации")
Slug = models.SlugField(max_length=250, blank=True, unique=True, help_text="Введите ссылку публикации. Нап.: eto-publikaciya")
ShortDesc = models.TextField("Короткое Описание", blank=True, help_text="Введите короткое описание публикации")
Content = RichTextUploadingField("Полное Описание", blank=True, help_text="Введите контент публикации")
# author = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True)
avtor = models.ForeignKey(Specialist, on_delete=models.SET_NULL, null=True, default=None, blank=True)
posttype = models.CharField(max_length=10, choices=POST_TYPE_CHOICES, default='image')
Image = ProcessedImageField(upload_to='blog/%Y/%m/%d/',
processors=[ResizeToFill(1200, 768)],
format='JPEG',
options={'quality': 60}, blank=False)
image_thumbnail = ImageSpecField(source='Image',
processors=[ResizeToFill(768, 500)],
format='JPEG',
# options={'quality': 60}
)
VideoEmbedCode = models.TextField("Embed код видео", blank=True, help_text="Введите Embed код публикации")
# published = models.DateTimeField(auto_now=True)
tags = TaggableManager(through=TaggedPost, blank=True)
allow_commenting = models.BooleanField("Разрешить комментирование", default=True)
hide_comments = models.BooleanField("Скрыть комментариев", default=False)
Created = models.DateTimeField(auto_now_add=True)
Updated = models.DateTimeField(auto_now=True)
status = models.CharField(max_length=10, choices=STATUS_CHOICES, default='published')
我的意见.py:
def blog_list(request):
template = 'blog/blog_index.html'
posts = Post.objects.filter(status='published')
common_tags = Post.tags.most_common()[:4]
recent_posts = Post.objects.filter(status='published').order_by("-Created")[:3]
#Paginator
paginator = Paginator(posts, 3) # Show n posts per page
page = request.GET.get('page')
posts = paginator.get_page(page)
# allTags = Tag.objects.all() #All tags
allBlogTags = Post.tags.all() #[:2]
# categories = Category.objects.all()
args = {
'posts': posts,
'common_tags':common_tags,
'recent_posts': recent_posts,
'allBlogTags':allBlogTags,
}
return render(request, template, args)
我对模型翻译有什么设置错误吗?如何禁用显示俄语(或塔吉克语)不可用的帖子?