2

URL を に向けようとするとhttp://localhost:6543/admin/product/50b0d01ce815af3c4167040e/edit、どういうわけか 404 エラーが表示されます。どこかで私の見解が間違っていると信じていますが、何度も試しても何が悪かったのかわかりません。

の内容resources.py:

    from pyramid.security import Authenticated
    from pyramid.security import Allow
    from pyramid.response import Response


    class Root(object):
        __name__ = ''
        __parent__ = None

        def __init__(self, request):
            pass

        def __getitem__(self, key):

            if key == 'admin_login':
               return Admin()

            elif key == 'admin':
               return Admin()

            raise KeyError


    class Admin(object):

        __name__ = ''
        __parent__ = Root
        __acl__ = [
          (Allow, Authenticated, 'admin')
        ]

        def __init__(self):
            pass

        def __getitem__(self, key):

            if key == 'product':
               print ('admin: ' , key)
               return Product()

            if key == 'category':
               print ('admin: ' + key)
               return Category()

            raise KeyError


    class Product(object):

        __name__ = ''
        __parent__ = Admin
        __acl__ = [
          (Allow, Authenticated, 'admin')
        ]

        def __init__(self):
            pass

        def __getitem__(self, key):
            if key :
               return ProductName(key)

            print ('Approaching KeyError: ', key)
            raise KeyError


    class ProductName(object):

        __parent__ = Product
        __acl__ = [
            (Allow, Authenticated, 'admin')
        ]

        def __init__(self, _str):
            self.__name__ = _str;
            self.__parent__ = Settings;

            print ('ProductName: ' + _str)
            pass

の内容views/admin.py:

    @view_config(context='mycart:resources.Product', renderer='post.jinja2')
    @view_config(context='mycart:resources.ProductName', name='edit', renderer='admin/settings/commissions.jinja2', permission = 'admin')
        print (' in product edit? ')
        return {'msg': 'yay editing!'}

ソースコードにいくつかの変更を加えました。http://localhost:6543/admin/product確実に機能しています。http://localhost:6543/admin/product/addただし、現在はレイアウトが表示されておらず、レイアウトも表示されていないようhttp://localhost:6543/admin/product/YYYY/editです。

の内容views/admin.py:

    @view_config(context='mycart:resources.ProductName', name='edit',    renderer='admin/product/test.jinja2', permission = 'admin')
    def product_edit(context, request):
        print 'edit here?'
        return { 'msg': '<div class="alert alert-success">Product Edit!</div>'}

    @view_config(context='mycart:resources.ProductName', name='add', renderer='admin/product/test.jinja2', permission = 'admin')
    def product_add(context, request):
        print 'add in here?'
        return { 'msg': '<div class="alert alert-success">Product Add</div>'}

    @view_config(context='mycart:resources.ProductName',  name="add" , request_method="POST", renderer='admin/product/add.jinja2', permission = 'admin')
    def product_add_post(context, request):
    return { 'msg': '<div class="alert alert-success">Product Added Successfully!</div>'}

    @view_config(context='mycart:resources.Product', name='', renderer='admin/product/list.jinja2', permission = 'admin')
    def product_list(context, request):

        return { 'msg': '<div class="alert alert-success">Listing of products</div>'}

の内容resources.py:

    from pyramid.security import Authenticated
    from pyramid.security import Allow
    from pyramid.response import Response

    class Root(object):
        __name__ = __parent__ = None

        def __init__(self, request):
            pass

        def __getitem__(self, key):

            if key == 'admin_login':
                return Admin()

            elif key == 'admin':
                return Admin()

           raise KeyError


    class Admin(object):

        __name__ = ''
        __parent__ = Root
        __acl__ = [
            (Allow, Authenticated, 'admin')
        ]

        def __init__(self):
            pass

        def __getitem__(self, key):

            if key == 'product':
               return Product()

           #if key == 'category':
          #    return Category()

            raise KeyError

    class Product(object):
        __name__ = ''
        __parent__ = Admin
        __acl__ = [
            (Allow, Authenticated, 'admin')
        ]

        def __init__(self):
            print ('Product() self _name: ' , self.__name__, ' parent: ', self.__parent__)
            pass

        def __getitem__(self, key):
            print ('product: ' , key)

            if key:
                print ('key is true: ' , key)
                return ProductName(key)

            raise KeyError

     class ProductName(object):
        __name__ = ''
        __acl__ = [
           ( Allow, Authenticated, 'admin')
        ]

        def __init__(self, _key):
            p = Product()
            p.__name__ = _key
            p.__parent__ = self

            print ( 'ProductName() init: ', _key)
            print ( p.__parent__)
            print ( p.__name__)

            print ('\n\n')
            pass


        def __getitem__(self, _key):
            print ( 'ProductName() __get__item key: ', _key)

            if _key == 'edit':
                p = Product()
                p.__name__ = _key
                p.__parent__ = self
                print ('ProductName()->edit  parent: ')
                print ( p.__parent__)
                print ( p.__name__)
                print ('\n\n')
                return p

            raise KeyError

コンソールで、URL を にポイントするhttp://localhost:6543/admin/product/addと、出力は次のようになります。

    < mycart.resources.ProductName object at 0x10abb7990 >
    add

しかし、404エラーが表示されているので、views/admin.pyどこか間違っているのではないでしょうか? view_config の順序を切り替えてみましたが、役に立ちませんでした:

    @view_config(context='mycart:resources.ProductName', name='add',  ... )
    ....

    @view_config(context='mycart:resources.ProductName', name='edit',  ... ) 

次の url: を使用して編集する場合http://localhost:6543/admin/vendor/50b0d01ce815af3c4167040e/edit、コンソール出力は次のようになります。

    < mycart.resources.ProductName object at 0x10abb4bd0 >
    edit

したがって、私のコンテキストでは、context='mycart:resources.ProductName' を使用し、名前セットを編集する必要があることを知っています。ただし、で設定した編集メッセージがコンソールに表示されませんviews/admin.py

どこで間違ったのでしょうか?

4

1 に答える 1

1

それを行う場合はif key == 'somefing'__getitem__純粋なトラバーサルが必要ないという兆候です。URL ディスパッチまたはハイブリッド アプローチを使用します。

追加: localhost:6543/admin/product/addProductName の「追加」ビューを登録したため、見つかりませんが、このパスから、「追加」ビューが登録されていない Product オブジェクトを取得します。これが、404 が見つからない理由です。

于 2012-11-26T16:07:55.077 に答える