首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从模型显示Django html

从模型显示Django html
EN

Stack Overflow用户
提问于 2022-05-15 15:23:12
回答 3查看 51关注 0票数 0

我需要在我的html页面上显示来自Profesor和Ucenik模型的数据: ime,prezime,jmbg。

代码语言:javascript
复制
{{profesor.ime}}
{{profesor.prezime}}
{{ucenik.ime}}
{{ucenik.prezime}}
{{ucenik.jmbg}}

我的配置文件页id是动态的,需要显示专业数据或者如果显示ucenik数据

我需要在我的views.py上添加什么

models.py

代码语言:javascript
复制
class Profesor(models.Model):
   user = models.OneToOneField(User, null=True, blank=True, on_delete=models.CASCADE)
   ime = models.CharField(max_length=200, null=True)
   prezime = models.CharField(max_length=200, null=True)
 
class Ucenik(models.Model):
   user = models.OneToOneField(User, null=True, blank=True, on_delete=models.CASCADE)
   ime = models.CharField(max_length=200, null=True)
   prezime = models.CharField(max_length=200, null=True)
   jmbg = models.IntegerField(null=True)

urls.py

代码语言:javascript
复制
path('profesor/', views.profesor, name='profesor'),
path('ucenik/', views.ucenik, name='ucenik'),
path('posetioc/', views.posetioc, name='posetioc'),
path('profil/<str:pk>/', views.profil, name='profil'), ]

views.py

代码语言:javascript
复制
def profesor(request):

   return render(request, 'pocetna_profesor.html')


def ucenik(request):

   return render(request, 'pocetna_ucenik.html')


def profil(request, pk):

   return render(request, 'profil.html')

HTML:

代码语言:javascript
复制
{% extends 'base.html' %}
<title>profesor</title>

{% block content %}

<body>
{% include 'navbar.html' %}
   <h1>Ime:</h1>
   {{profesor.ime}}
</body>

{% endblock %}
EN

回答 3

Stack Overflow用户

发布于 2022-05-15 15:36:07

您需要在视图上下文中添加一个“教授”和“Ucenik”实例。

代码语言:javascript
复制
context = {
    'professor': Professor.objects.get(),
    'ucenik': Ucenik.objects.get()
}
return render(request, context, 'url.html')
票数 0
EN

Stack Overflow用户

发布于 2022-05-15 17:33:58

通过引入一个额外的参数来定义您的角色(即,教授/Ucenik),您可以使您的配置文件视图动态化。

/profil/profesor/2/教授/profil/ucenik/1 for ucenik

代码语言:javascript
复制
from django.urls import path

urlpatterns=[
    path('profil/<str:role>/<int:pk>/', views.profil, name='profil'),
]
代码语言:javascript
复制
# views.py
from .models import Profesor,Ucenik # import your model
def profil(request,role,pk):
    context = {}
    context['role'] = type 
    if type=="profesor":
        context['person'] = Profesor.objects.get(id=pk)
    else:
        context['person'] = Ucenik.objects.get(id=pk)
    return render(request, 'profil.html',context)
代码语言:javascript
复制
<!-- profil.html -->
{% extends 'base.html' %}
<title>{{role}}</title>

{% block content %}

<body>
{% include 'navbar.html' %}

   <h1>Ime:</h1>
   {{person.ime}}
</body>

{% endblock %}
票数 0
EN

Stack Overflow用户

发布于 2022-05-15 19:11:39

不同方法:

假设您的User模型有一个id或任何唯一字段。您可以使用该id作为您的profil (即url's <int:pk>)。因此,您可以不使用profil/profesor/3,而可以使用profil/3,这肯定是两类中的一种(假设职业者和ucenik是相互排斥的)。

因此,为了做到这一点,将用户模型与其他模型一起导入视图。

views.py

代码语言:javascript
复制
from django.shortcuts import render

from ..models import User # give correct path to user model
from .models import Profesor,Ucenik

def profil(request,pk):
    context={}
    person = User.objects.get(id=pk)
    
    try :
        person.profesor
        # print(dir(person))
    except Profesor.DoesNotExist:
        context['person'] = Ucenik.objects.get(id=person.ucenik.id)
    else:
        context['person'] = Profesor.objects.get(id=person.profesor.id)

    return render(request,"profil.html",context)

urls.py

代码语言:javascript
复制
from django.urls import path
from .views import profil

urlpatterns = [
    path('profil/<int:pk>/',profil) # I have used int
]

我使用的是person,即中性变量名,而不是教授或ucenik。你可以把它命名为任何东西,即使是profil.html profil

代码语言:javascript
复制
{{person.id}}
{{person.ime}}
{{person.prezime}}

{% if role == "ucenik" %}
  {{person.jmbg}}
{% else %}
  <!-- profesor does not have jmbg -->
{% endif %}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72249620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档