当我试图将我的 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/编辑显示布局。
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',并将其名称设置为 edit。但是,它没有在控制台中显示我在 views/admin.py 中设置的编辑消息。
我可能哪里出错了?
请您参考如下方法:
如果您在 __getitem__ 中执行 if key == 'somefing' 这表明您不需要纯遍历。 使用 URLdispatch 或混合方法。
ADDED:localhost:6543/admin/product/add 显示未找到,因为您为 ProductName 注册了“添加” View ,但是从该路径您获得了未查看“添加”的产品对象' 为它注册,这就是为什么找不到 404
