当我尝试将我的网址指向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
在我的控制台中,当我将我的网址指向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', ... )
对于使用以下网址进行编辑时:http://localhost:6543/admin/vendor/50b0d01ce815af3c4167040e/edit
,控制台输出为:
< mycart.resources.ProductName object at 0x10abb4bd0 >
edit
所以我知道在我的上下文中,我应该使用context ='mycart:resources.ProductName',并设置它编辑的名称。但是,它没有在我在views/admin.py
中设置的控制台中显示编辑消息。
我哪里可能出错了?
答案 0 :(得分:1)
如果您在if key == 'somefing'
中__getitem__
,则表明您不需要纯粹的遍历。
使用URLdispatch或Hybrid aproach。
ADDED:localhost:6543/admin/product/add
显示未找到,becoze您注册了ProductName的“添加”视图,但是从此路径获得了Product对象,该对象没有为其注册“add”注册,这就是为什么404找不到< / p>