【发布时间】:2017-09-01 11:37:47
【问题描述】:
我有一个包含 4 个表的 MySQL 数据库。 这些表在我的 models.py 文件(在我的 Django 应用程序中)中有 4 个相应的类。 我在 views.py 文件中定义了一些视图并制作了一些 HTML 模板,但每个模板只能与 1 个视图通信(我认为它必须是这样的)。 但我想在 html 模板上显示来自不同表(来自 models.py 的类)的信息。
例如: 我有一个这样的模板“about.html”:
{% load static %}
<link rel="stylesheet" type="text/css" href="{% static 'pdbapp/stat_style.css' %}" />
<body class="news">
<header>
<div class="nav">
<ul>
<li class="home"><a href="/pdbapp/home/">Home</a></li>
<li class="info PDB"><a href="/pdbapp/pdbinfo/">Infos</a></li>
<li class="about"><a class="active" href="/pdbapp/about/">About</a></li>
</ul>
</div>
</header>
</body>
<h1>About Us</h1>
<h2>Project members</h2>
{% if namelist %}
<ul>
{% for i in namelist %}
<li><a href="/pdbapp/pdbinfo/{{ i }}">{{ i }}</a></li>
{% endfor %}
</ul>
{% else %}
<p>No informations available.</p>
{% endif %}
我想在我的 HTML 模板中显示 MySQL 表“PDB”和“struct_sec”中的条目数(见下文):
CREATE TABLE PDB(
id_PDB_chain CHAR(5) NOT NULL PRIMARY KEY,
id_PDB CHAR(4) NOT NULL,
chaine VARCHAR(10) NOT NULL,
header VARCHAR(255) NOT NULL,
sequence_Proteine TEXT NOT NULL,
start_seq INT NOT NULL,
taille_Proteine INT NOT NULL,
resolution_PDB FLOAT NOT NULL,
meth_Res VARCHAR(10) NOT NULL,
FOREIGN KEY (meth_Res)
REFERENCES methodes_res(meth_Res)
ON DELETE CASCADE
);
CREATE TABLE struct_sec(
id_struct_sec INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
start_pred INT NOT NULL,
structure_Predite TEXT NOT NULL,
nombre_PPII INT NOT NULL,
pourcentage_PPII FLOAT NOT NULL,
angle_phi TEXT NOT NULL,
angle_psi TEXT NOT NULL,
id_PDB_chain CHAR(5) NOT NULL,
nom_Analyse VARCHAR(7) NOT NULL,
FOREIGN KEY (id_PDB_chain)
REFERENCES PDB(id_PDB_chain)
ON DELETE CASCADE,
FOREIGN KEY (nom_Analyse)
REFERENCES methodes_analyse(nom_Analyse)
ON DELETE CASCADE
);
下面是文件“models.py”中对应的类:
from __future__ import unicode_literals
from django.db import models
class Pdb(models.Model):
id_pdb_chain = models.CharField(db_column='id_PDB_chain', primary_key=True, max_length=5) # Field name made lowercase.
id_pdb = models.CharField(db_column='id_PDB', max_length=4) # Field name made lowercase.
chaine = models.CharField(max_length=10)
header = models.CharField(max_length=255)
sequence_proteine = models.TextField(db_column='sequence_Proteine') # Field name made lowercase.
start_seq = models.IntegerField()
taille_proteine = models.IntegerField(db_column='taille_Proteine') # Field name made lowercase.
resolution_pdb = models.FloatField(db_column='resolution_PDB') # Field name made lowercase.
meth_res = models.ForeignKey('MethodesRes', models.DO_NOTHING, db_column='meth_Res') # Field name made lowercase.
def __unicode__(self):
return self.id_pdb
class Meta:
managed = False
db_table = 'PDB'
class StructSec(models.Model):
id_struct_sec = models.AutoField(primary_key=True)
start_pred = models.IntegerField()
structure_predite = models.TextField(db_column='structure_Predite') # Field name made lowercase.
nombre_ppii = models.IntegerField(db_column='nombre_PPII') # Field name made lowercase.
pourcentage_ppii = models.FloatField(db_column='pourcentage_PPII') # Field name made lowercase.
angle_phi = models.TextField()
angle_psi = models.TextField()
id_pdb_chain = models.ForeignKey(Pdb, models.DO_NOTHING, db_column='id_PDB_chain') # Field name made lowercase.
nom_analyse = models.ForeignKey(MethodesAnalyse, models.DO_NOTHING, db_column='nom_Analyse') # Field name made lowercase.
def __str__(self):
return str(self.id_pdb_chain)
class Meta:
managed = False
db_table = 'struct_sec'
我该怎么做。 我是 Django 的初学者,请相信我真的试图理解网上已经解释过的内容,但没有成功。
【问题讨论】:
-
您可以在单个视图中查询所有表,然后将数据传递给模板。
标签: python html mysql django templates