如何在 Django 中翻译帖子?

标记

我正在尝试使用i18n.

我已经翻译了几乎所有的文本,但我什至无法想象如何翻译我的帖子。我在我的项目中使用 mixins。

img(点击这里)

HTML 帖子详细信息模板:

<h3>
    {% trans post.title %}
</h3>
<h6 style="float: right; opacity: 0.5; margin-top: 6px; margin-right: 30px;"> 
    {{ post.date_pub }}
</h6>
<div style="clear: right;"></div>
<p>
    {{ post.body|safe }}
</p>

模型.py:

class Post(models.Model):
                title = models.CharField(max_length=150, db_index=True)
                slug = models.SlugField(max_length=150, blank=True, unique=True)
                body = RichTextUploadingField(blank=True, db_index=True)
                description = models.TextField(max_length=100, blank=True, db_index=True)
                tags = models.ManyToManyField('tag', blank=True, related_name='posts')
                date_pub = models.DateTimeField(auto_now_add=True)

                def get_absolute_url(self):
                    return reverse('post_detail_url', kwargs={'slug': self.slug})

                def get_update_url(self):
                    return reverse('post_update_url', kwargs={'slug': self.slug})

                def get_delete_url(self):
                    return reverse('post_delete_url', kwargs={'slug': self.slug})

                def save (self, *args, **kwargs):
                    if not self.id:
                        self.slug = gen_slug(self.title)
                    super().save(*args, **kwargs)

                def __str__(self):
                    return self.title

                class Meta:
                    ordering = ['-date_pub']

表格.py

class PostForm(forms.ModelForm):
    class Meta:
        model = Post
        fields = ['title', 'slug', 'body', 'tags', 'description']

        widgets = {
        'title': forms.TextInput(attrs={'class': 'form-control'}),
        'slug': forms.TextInput(attrs={'class': 'form-control'}),
        'body': forms.TextInput(attrs={'class': 'form-control'}),
        'description': forms.TextInput(attrs={'class': 'form-control'}),
        'tags': forms.SelectMultiple(attrs={'class': 'form-control'}),
        }

    def clean_slug(self):
        new_slug = self.cleaned_data['slug'].lower()

        if new_slug == 'create':
            raise ValidationError('Slug may not be "Create"')
        return new_slug

视图.py

class PostDetail(ObjectDetailMixin, View):
    model = Post
    template = 'main/post_detail.html'

class PostCreate(LoginRequiredMixin ,ObjectCreateMixin, View):
    form_model = PostForm
    template = 'main/post_create_form.html'
    raise_exception = True

class PostUpdate(LoginRequiredMixin, ObjectUpdateMixin, View):
    model = Post
    form_model = PostForm
    template = 'main/post_update_form.html'
    raise_exception = True

class PostDelete(LoginRequiredMixin, ObjectDeleteMixin, View):
    model = Post
    template = 'main/post_delete_form.html'
    redirect_url = 'posts_list_url'
    raise_exception = True

实用程序.py

class ObjectDetailMixin:
    model = None
    template = None

    def get(self, request, slug):
        obj = get_object_or_404(self.model, slug__iexact=slug)
        return render(request, self.template, context={self.model.__name__.lower(): obj, 'admin_object': obj, 'detail': True})

class ObjectCreateMixin:
    form_model = None
    template = None

    def get(self, request):
        form = self.form_model()
        return render(request, self.template, context={'form': form})

    def post(self, request):
        bound_form = self.form_model(request.POST)

        if bound_form.is_valid():
            new_obj = bound_form.save()
            return redirect(new_obj)
        return render(request, self.template, 'main/tag_create.html', context={'form': bound_form })

class ObjectUpdateMixin:
    model = None
    form_model = None

    def get(self, request, slug):
        obj = self.model.objects.get(slug__iexact=slug)
        bound_form = self.form_model(instance=obj)
        return render(request, self.template, context={'form': bound_form, self.model.__name__.lower() :obj})

    def post(self, request, slug):
        obj = self.model.objects.get(slug__iexact=slug)
        bound_form = self.form_model(request.POST, instance=obj)

        if bound_form.is_valid():
            new_obj = bound_form.save()
            return redirect(new_obj)
        return render(request, self.template, context={'form': bound_form, self.model.__name__.lower(): obj})

class ObjectDeleteMixin:
    model = None
    template = None
    redirect_url = None
    def get(self, request, slug):
        obj = self.model.objects.get(slug__iexact=slug)
        return render(request, self.template, context={self.model.__name__.lower(): obj})

    def post(self, request, slug):
        obj = self.model.objects.get(slug__iexact=slug)
        obj.delete()
        return redirect(reverse(self.redirect_url))
哈基姆克斯

有一个名为 django-modeltranslation 的包提供数据库中特定语言的镜像字段,允许内容特定的翻译。它也有很好的文档 - https://django-modeltranslation.readthedocs.io/en/latest/index.html这是本网站使用的语言切换示例

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Django模板中包含反向URL的翻译

如何在Django中加入惰性翻译?

Django法语翻译-如何处理翻译字符串中的单引号?

Django:如何在Django管理区域中添加/删除/更新翻译短语(在po文件中)?

如何在单个帖子中更新多个实例-Django Rest Framework

如何在Django中打印帖子请求数据

如何在Django 2.1中实施新帖子的审核

如何在Django Rest框架中自动将登录用户分配给帖子?

如何在Django中翻译Javascript标准错误消息?

如何在Django中限制每个帖子的赞

如何在Django中创建预定帖子?

如何在Django帖子中添加评论

如何在Django Admin中解决将帖子和用户链接到评论的问题

django-modeltranslation:如何禁用不具有翻译语言的对象(例如帖子)的显示?

如何在Django翻译中翻译数字?

如何在Django的PasswordChangeForm中自定义和翻译错误消息?

我们如何区分wpml中的翻译过的帖子和原始的帖子?

如何翻译Django应用

如何在 Django 模板中订购帖子条目

如何在Django中获取同一类别中的所有帖子

如何在 Django 中获取翻译记录

如何在 Django 中制作帖子标题列表

Django:如何在帖子下添加评论

如何在基于函数的视图中按类别查询 django 中的帖子

如何在 django 中创建来自同一类别的帖子列表

如何在 django 中获取有限数量的最近帖子

如何在 Django 的类别列表中显示帖子列表

如何在 Django 中显示最后 4 个帖子?

如何在 Django 中顯示最近的帖子