我有一個django應用程序'test_app'。 test_app頁面 - 「domain/test_app /」有一個到應用程序「基因」中另一個頁面的鏈接。這需要我「domain/test_app/genes /」。在這個頁面中,我有一個鏈接列表,它來自我的django數據庫中一個名爲「gene」的表格,它位於test_app/models.py中,類別爲Gene。這通過屬性'gene'鏈接到另一個名爲「Variants」的表作爲外鍵。Django的應用程序視圖 - 如何從URL中的django數據庫中獲取條目並從數據庫獲取更多信息以查看該視圖?
這是所有在test_app/models.py:
class Gene(models.Model):
gene = models.CharField(primary_key=True, max_length=110)
transcript = models.CharField(max_length=100)
def __str__(self):
return self.gene
class Variant(models.Model):
variant = models.CharField(primary_key=True, max_length=210)
gene = models.ForeignKey(Gene, on_delete=models.CASCADE)
cds = models.CharField(max_length=150)
def __str__(self):
return self.variant
我test_app/urls.py urlpatterns的是這樣的:
urlpatterns = [
url(r'^$', views.test_app, name='test_app'),
url(r'^genes/$', views.genes, name='genes'),
url(r'^genes/(?P<gene>)', views.variant_info, name='variant_info'),
]
和test_app/views.py這個樣子(鏈接到我的模板中的test_app/templates/test_app /目錄中):
def test_app(request):
template = loader.get_template('test_app/index.html')
return render(request, 'test_app/index.html')
def genes(request):
gene_list = Gene.objects.all()
context = {'gene_list': gene_list}
return render(request, 'test_app/genes.html', context)
def variant_info(request, gene):
variant_info = Variant.objects.filter(gene=gene)
return(request, 'test_app/gene_info.html', {'variant_info': variant_info}
我在我的基因表中有一個基因列表數據庫。當使用'gene_list = Gene.objects.all()'獲得這些基因時,這可以正常工作。然後,我將這個列表呈現爲模板,作爲我的「domain/test_app/genes」頁面上的一系列鏈接。例如,當我在此頁面上點擊TP53時,它會轉到「domain/test_app/genes/TP53 /」。這帶我到正確的頁面。
但是,我顯然沒有這個urlpattern正確的正則表達式,因爲當我輸入更多的數字或字符,如/ TP53098120918它仍然會進入同一頁面。即使當我把r'^基因/(?P)$'這仍然發生,我不明白爲什麼?
但我所面臨的主要問題是從我的數據庫中的變體表中獲取信息,並將其渲染到特定的基因頁面,如domain/test_app/genes/TP53。
當我點擊TP53它不經過我的看法功能「variant_info」爲基因的說法,因爲該行:
variant_info = Variant.objects.filter(gene=gene)
不從數據庫獲取任何信息 - 我認爲這將通過基因=「TP53」當我點擊鏈接,因此這將是:
variant_info = Variant.objects.filter(gene='TP53')
這將與基因TP53返回從變量表中的信息。我不知道如何從views.py中的基因功能正確訪問TP53。
在urls.py中,您應該正確包含正則表達式,例如,如果您想通過id獲取基因: 'url(r'^ genes /(?P \ d +)',views.variant_info,name = 'variant_info'),' 這種方式將基因ID傳遞給視圖,那麼您應該以這種方式檢索變體對象:'variant_info = Variant.objects.filter(gene__id = gene)' –
abidibo
我沒有基因ID我的桌子。主要關鍵是基因名稱 – trouselife
哦,我明白了。這是非常罕見的,無論哪種方式,定義字符匹配在reg exp中:'url(r'^ genes /(?P [^ /] +)',views.variant_info,name ='variant_info')'然後'variant_info = Variant.objects.filter(gene__gene = gene)' –
abidibo