1

django の URL 設定のように、express.js を使用できますか?

Express.js の URL:

app.get('/users/:id/feed',function(){})

ジャンゴの URL:

url(r'^users/(?P<id>.*)/feed$', 'users.views.feed')

Express の URL conf は django よりも単純すぎると思います。次のようにdjangoでURLを使用するといいでしょう。

url('/users/:id/feed', 'users.views.feed')
4

2 に答える 2

2

コア Django では、正規表現を使用して URL のみを指定できます。

私はexpress.jsに精通していませんが、正規表現を使用することで、次のようなクールなことを行うことができます:

  • 位置パラメータと名前付きパラメータ

    # named
    url(r'^(?P<foo>.*)/(?P<foo2>.*)/$', 'view', name='view')
    
    # corresponds to
    # something does not have to be supplied
    def view(request, something=None, foo=None, foo2=None)
        ...
    

    # positional
    url(r'^(.*)/(.*)/$', 'view', name='view')
    
    # corresponds to
    # all groups in regex are supplied in the same order (positions)
    def view(request, foo, foo2)
        ...
    
  • 逆URLを計算する

    # with
    url(r'^some/path/(?P<foo>.*)/(?P<foo2>.*)/$', 'view', name='view')
    
    >>> reverse('view', kwargs={'foo':'hello', 'foo2':'world'})
    u'some/path/hello/world/'
    
  • URL を制限する

    url(r'^some/path/(?P<id>\d+)/$', 'view', name='view')
    # will only allow urls like
    # some/path/5/
    # some/path/10/
    
    # and will reject
    # some/path/hello/
    # some/path/world/
    
于 2012-11-19T02:45:23.457 に答える
2

Django でより単純な URL 構造を使用するには、URL 形式を正規表現形式に変換するユーティリティ関数を作成する必要があります。

あなたの例に基づいた簡単な関数は次のとおりです。

def easy_url(url_str):
    patt = re.compile(r':\w+/?')
    matches = patt.findall(url_str)
    for match in matches:
        var = match[1:-1]
        # generate re equivalent 
        var_re = r'(?P<%s>\w+)/'%var
        url_str = url_str.replace(match, var_re) 
    url_str += '$'
    return url_str

# in your url file
url(easy_url('/users/:id/feed/'), 'users.views.feed')

この関数を更新して、url 変数のタイプ (数値のみなど) を指定できます。

ただし、正規表現は非常に強力で、非常に多くのことができます。したがって、このようなラッパーは、軽量に保つために単純なルールを持つ URL にのみ使用する必要があります。

于 2012-11-19T11:27:28.553 に答える