2017-03-11 3 views
0

私は次のURLを持っている:ジャンゴ - 同じ正規表現と2つのURLが、異なる変数とビュー

url(r'^(?P<college_name>\w+)/$', views.detail, name="detail"), 
url(r'^(?P<photographer_username>\w+)/$', views.photographer, name="photographer"), 

私は/college_name URLを行う場合には動作しますが、そのようなwebsite.com/johnsmithなどのカメラマンに入力するとき、それは唯一の検索最初のURLパターンを入力して停止します。

最初にphotographer URLパターンを入力すると、写真家の方で、大学では使用できません。

どのように修正して両方に対応できるのですか?

+0

アクセスするURLをコンピュータがどのように把握すると思いますか?これはできません。 –

答えて

2

2つのURLパターンを区別する必要があります。そうでない場合、後者は常に前者によって影付きになります。どのようにこれはおそらく今までに仕事ができる

url(r'^college/(?P<college_name>\w+)/$', views.detail, name="detail"), 
url(r'^photographer/(?P<photographer_username>\w+)/$', views.photographer, name="photographer"), 
2

:?

はたぶん両方に一意の文字列を付加しましたかあなたが言うように、正規表現は同じです。では、Djangoはあなたがどのような見方をしているかを知ることができますか?それはできないので、最初のものを選ぶだけです。例えば、「/写真家//$(P \ + wは?)」など、

1

他の人が持っていたよう:

この問題を解決する唯一の方法は、彼らが唯一の名前を持っていないようにあなたのURLを変更することですコンピュータは、それが自分のものであるかどうかを判断することができないと言った。最良の解決策は、/photographer//college/のような明確なパスを持つことです。

両方のビューが同じURLスキームを使用すると主張する場合は、プログラムに差別化の方法を伝える必要があります。

URL定義:どちらか一方を選ぶ

url(r'^(?P<photographer_or_college>\w+)/$', photographer_or_college_view, name="photographer_or_college") 

ビュー:

def photographer_or_college_view(request, photographer_or_college): 
    try: 
     photographer = Photographer.objects.get(photographer_name=photographer_or_college) 
    except Photographer.DoesNotExist: 
     pass 
    else: 
     return photographer_view(request, photographer) 

    college = get_object_or_404(College, college_name=photographer_or_college) 
    return college_view(request, college) 

名前の競合がある場合は、問題に実行されますので、これはお勧めしません。

関連する問題