我有一个django应用程序“test_app”。test_app页面-“domain/test_app/”链接到app“genes”中的另一个页面。这将带我进入“域/测试应用程序/基因/”。在这个页面中,我有一个链接列表,来自我的django数据库中名为“gene”的表,它在test_app/models.py中作为类gene。这通过作为外键的属性“gene”链接到另一个名为“variants”的表。
这都在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/url.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/directory,其中包含我的模板):
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()”获取这些基因时,此操作正常。然后,我将这个列表作为一系列链接呈现在我的“域/测试应用程序/基因”页面的模板中。例如,当我点击这个页面上的tp53时,它会转到“domain/test-app/genes/tp53/”。这把我带到正确的页面。
但是,我显然没有这个urlpattern的正则表达式是正确的,因为当我键入更多的数字或字符(如/tp53098120918)时,它仍然会转到同一页。即使我把r'^genes/(?p)$'这还在发生,我不明白为什么?
但我面临的主要问题是从数据库中的变量表中获取信息并将其呈现到特定的基因页面,如domain/test_app/genes/tp53。
当我点击TP53时,它不会作为基因参数传递给我的视图函数“variant_info”,因为行:
variant_info = Variant.objects.filter(gene=gene)

没有从数据库中获取任何信息-我想当我单击链接时,这将传递gene='tp53',因此这将是:
variant_info = Variant.objects.filter(gene='TP53')

它将从变异表中返回基因为tp53的信息。我不知道如何从views.py中的基因功能正确访问tp53。

最佳答案

问题是您的(?P<gene>)与任何字符都不匹配,因此您的视图中总是有gene=''
尝试将URL模式更改为:

url(r'^genes/(?P<gene>\w+)/$', views.variant_info, name='variant_info'),

这将接受gene参数的字母a-z、a-z、数字0-9和下划线。为了与您的其他观点保持一致,我添加了尾随斜线,并添加了美元,因为这样做通常是一个好主意。

关于python - Django应用程序 View -如何从URL中的django数据库获取条目以及如何从数据库中获取该 View 的更多信息?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40491551/

10-12 22:05