单击时,Django显示另一个模型属性

时间:2020-02-21 07:50:55

标签: python html django

我正在尝试创建一个窗口,在该窗口中,当单击第二种语言时,将以一种语言显示一些文本。我创建了一个模型,其中包含有关发布的所有信息。

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')

Image explaining what i want to achieve

2 个答案:

答案 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')

感谢回复

相关问题