我正在尝试创建一个窗口,在该窗口中,当单击第二种语言时,将以一种语言显示一些文本。我创建了一个模型,其中包含有关发布的所有信息。
model.py
from django.db import models
from datetime import datetime
from django.contrib.auth.models import User
def get_default_user():
return User.objects.get(id=1)
class EveryPost(models.Model):
title_pl = models.CharField(max_length=100, blank=True)
title_ru = models.CharField(max_length=100, blank=True)
text_pl = models.TextField(blank=True)
text_ru = models.TextField(blank=True)
date = models.DateTimeField(default=datetime.now, blank=True)
User = models.ForeignKey(User, on_delete=models.CASCADE, default=get_default_user)
def __str__(self):
return self.title_pl
html
{% for obj in EveryPost %}
<div class="card text-center">
<div class="card-header">
<ul class="nav nav-tabs card-header-tabs">
<li class="nav-item">
<a class="nav-link nav-main" href="{% url 'rupl' obj.pk %}">PL</a>
</li>
<li class="nav-item">
<a class="nav-link nav-main" href="{% url 'plru' obj.pk %}">RU</a>
</li>
</ul>
</div>
<div class="card-body">
<h5 class="card-title"><a href="{% url 'detailpost' obj.pk %}">{{ obj.title_pl }}</a></h5>
<p class="card-text">{{ obj.text_pl|truncatechars:350 }}</p>
<a href="{% url 'detailpost' obj.pk %}" class="btn btn-dark float-right">Zobacz </a>
</div>
<div class="card-footer text-muted">
<span class="float-left">{{ obj.date|date:"d M y" }}</span>
<span class="float-right">Przesłane przez: {{ obj.User }}</span>
</div>
</div>
{% endfor %}
我试图在text_pl和text_ru之间进行切换,但这不是一个好主意(数据丢失)
views.py
def plru(request, pk):
post = EveryPost.objects.get(pk=pk)
post.text_pl = post.text_ru
post.title_pl = post.title_ru
post.save()
return redirect('index')
def rupl(request, pk):
post = EveryPost.objects.get(pk=pk)
post.text_ru = post.text_pl
post.title_ru = post.title_pl
post.save()
return redirect('index')
答案 0 :(得分:0)
不需要太多的功能和网址, 简单更好: 在views.py中:
def post_detail(request, post_id):
post = get_or_404(Post, id= post_id)
return render(request, 'post_details.html")
在post_details.html中:
<div id="post_in_1st_lng" style="visibility: visible;">
{{ post.title_pl }}
</div>
<div id="post_in_2nd_lng" style="visibility: hidden;">
{{ post.title_ru }}
</div>
<button id="lan_change">Change Language </button>
<script>
$("#lan_change").on('click', function (){
first_vis = $("#post_in_1st_lng").css('visibility') == "visible" ? "hidden" : "visible";
sec_vis = $("#post_in_2nd_lng").css('visibility') == "visible" ? "hidden" : "visible";
$("#post_in_2nd_lng").css('visibility', sec_vis);
$("#post_in_1st_lng").css('visibility', first_vis);
});
</script>
这是一个简单的jQuery解决方案。 另一种方法是使用ajax,但是由于post对象是相同的,因此已经加载了两种语言的文本,因此无需浪费时间调用服务器。
答案 1 :(得分:0)
我修复了它,也许这不是最有效的方法,但可以::
我在模型中添加了一个额外的元素:
version_pl = models.BooleanField(default=True)
因此,在 HTML 中,它会检查是对还是错:
<div class="card-body">
{% if obj.version_pl == False %}
<h5 class="card-title"><a href="{% url 'detailpost' obj.pk %}">{{ obj.title_ru }}</a></h5>
<p class="card-text">{{ obj.text_ru|truncatechars:350 }}</p>
{% else %}
<h5 class="card-title"><a href="{% url 'detailpost' obj.pk %}">{{ obj.title_pl }}</a></h5>
<p class="card-text">{{ obj.text_pl|truncatechars:350 }}</p>
{% endif %}
<a href="{% url 'detailpost' obj.pk %}" class="btn btn-dark float-right">Zobacz całość</a>
</div>
和 views.py
def rupl(request, pk):
post = EveryPost.objects.get(pk=pk)
post.version_pl = True
post.save()
return redirect('index')
def plru(request, pk):
post = EveryPost.objects.get(pk=pk)
post.version_pl = False
post.save()
return redirect('index')
感谢回复