私はdjangoアプリケーション 'test_app'を持っています。 test_appページ - "domain/test_app /"には、アプリ "Genes"内の別のページへのリンクがあります。これは私を "domain/test_app/genes /"に連れて行きます。このページでは、私のdjangoデータベースの "gene"と呼ばれるテーブルのリンクのリストがあります。これはtest_app/models.pyというクラスGeneです。これは、外部キーとして属性「遺伝子」を介して「バリアント」と呼ばれる別のテーブルにリンクします。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 /」に移動します。これは正しいページに私を連れて行きます。
しかし、私は明らかに、このURLパターンの正規表現は、/ TP53098120918のように多くの桁や文字を入力したときと同じように正しいページにはなりません。私がr '^ genes /(?P)$を置いたとしても、これはまだ起こっているのですが、なぜそれほど理解できませんか?
しかし私が抱えている主な問題は、自分のデータベースのバリアントテーブルから情報を得て、これをdomain/test_app/genes/TP53などの特定の遺伝子ページにレンダリングすることです。
私はラインので、それは遺伝子の引数としての私のビュー関数の「variant_info」を通らないTP53をクリックしています:
variant_info = Variant.objects.filter(gene=gene)
は、データベースから情報を取得しません - 私はこれを考えました遺伝子を渡す=「TP53」私は、リンクをクリックして、そのためこれは次のようになりとき:TP53のような遺伝子に変異型テーブルから情報を返します
variant_info = Variant.objects.filter(gene='TP53')
を。私は、views.pyの遺伝子機能からTP53に正しくアクセスする方法を知らない。
としてあなたが最後r'^genes/(?P<gene>TP\d+)$'
(私はそれ以外の場合は、文字列に一致するようにしようとすると、ちょうど最初の試合を受け入れると思う)
で数字だけを一致させるようなものを必要とするだろうURLの
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