小编Ale*_*kov的帖子

Django Rest框架中的多个模型?

我正在使用Django Rest框架.我想序列化多个模型并作为响应发送.目前我每个视图只能发送一个模型(如CartView下面只发送Cart对象).以下模型(无关)可以在那里.

class Ship_address(models.Model):
   ...

class Bill_address(models.Model):
   ...

class Cart(models.Model):
   ...

class Giftwrap(models.Model):
   ...
Run Code Online (Sandbox Code Playgroud)

我尝试使用DjangoRestMultiplemodels,它工作正常,但有一些限制.有没有内置的方式?我不能追加到以下视图中创建的序列化程序吗?

from rest_framework.views import APIView

class CartView(APIView):
    """
    Returns the Details of the cart
    """

    def get(self, request, format=None, **kwargs):
        cart = get_cart(request)
        serializer = CartSerializer(cart)
        # Can't I append anything to serializer class like below ??
        # serializer.append(anotherserialzed_object) ??
        return Response(serializer.data)
Run Code Online (Sandbox Code Playgroud)

我真的很喜欢DRF.但是这个用例(发送多个对象)让我觉得如果编写一个普通的旧Django视图将更适合这样的要求.

python django django-rest-framework

14
推荐指数
1
解决办法
9470
查看次数

plone.app.testing无法调用BrowserView

我通过paster添加了几个BrowserViews,现在我正在尝试从plone.app.testing运行它们,因为我喜欢可重复且一致的测试.从浏览器手动调用视图可以正常工作.

我已尝试手动导入和初始化视图,以及从受限制的遍历调用该类.在这两种情况下,对象初始化都很好但是当我尝试触发渲染要么将实例作为函数调用,要么使用__call __()方法时,我得到以下错误:

*** KeyError: 'global_cache_settings
Run Code Online (Sandbox Code Playgroud)

我在plone.app.test中查看README.rst中的示例,它似乎没有提到问题,快速谷歌搜索也没有产生任何结果.它可能是网站定制之一,但是在greping源代码时,我发现Products.CMFPlone中提到了'global_cache_settings',所以它可能是一个简单的东西:

eggs/Products.CMFPlone-4.1.4-py2.6.egg/Products/CMFPlone/skins/plone_templates/main_template.pt
28:  <metal:cache use-macro="context/global_cache_settings/macros/cacheheaders">
29:    Get the global cache headers located in global_cache_settings.

eggs/plone.app.layout-2.1.13-py2.6.egg/plone/app/layout/presentation/presentation.pt
11:    <metal:cache use-macro="here/global_cache_settings/macros/cacheheaders">
12:        Get the global cache headers located in global_cache_settings.

eggs/plonetheme.sunburst-1.1.6-py2.6.egg/plonetheme/sunburst/skins/sunburst_templates/main_template.pt
20:    <metal:cache use-macro="context/global_cache_settings/macros/cacheheaders">
21:    Get the global cache headers located in global_cache_settings.
Run Code Online (Sandbox Code Playgroud)

这是相关的类声明:

from zope.interface import implements, Interface

from Products.Five import BrowserView
from Products.CMFCore.utils import getToolByName
from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
from Products.MyProduct import MyProductMessageFactory as _

class IPromoBoardHome(Interface):
    """
    PromoBoardHome view interface
    """
    def __init__(self, context, …
Run Code Online (Sandbox Code Playgroud)

python testing plone

5
推荐指数
1
解决办法
532
查看次数

在变色龙中使用tal宏

我是Plone用户,我一直在使用Products.Five.browser.pagetemplatefile.ViewPageTemplateFile中的tal宏很长一段时间,并创建了一个现有宏和模板库.

我开始通过grokcore.chameleon 1.0.3使用变色龙页面模板,并希望在现有框架中继续使用它们.IE我希望能够导入tal宏,然后使用变色龙填充宏插槽.

到目前为止,我尝试了几种导入现有宏的方法,但没有一种方法可行.即使安装了Chameleon 2.14 [1],也不会启用"加载"关键字.

我一直在寻找一个兼容层,但到目前为止我发现的只是z3c.pt,目的是加速.pt页面渲染而不提供兼容层.[2]

是否有任何软件包可以激活tal宏,然后从Chameleon页面模板中插入信息?作为一种解决方法,我可以渲染tal模板,渲染变色龙模板,然后进行字符串替换,但必须有人以更优雅的方式解决这个问题.

[1] 如何使用金字塔/ ZPT(变色龙)宏

[2] https://pypi.python.org/pypi/z3c.pt

更新 作为一种解决方法,我创建了一个生成中间页面的函数,该页面接受由变色龙页面模板生成的html.

common.py

from zope.publisher.browser import BrowserView
from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile

def insert_into_master(html, view):

    class View(BrowserView):
        def __call__(self):
            self.data = html
            return ViewPageTemplateFile('pt/master_holder.pt')(self)

    rendered = View(view.context, view.request)
    return rendered()
Run Code Online (Sandbox Code Playgroud)

PT/master_holder.pt

<html
xmlns="http://www.w3.org/1999/xhtml"
xmlns:tal="http://xml.zope.org/namespaces/tal"
xmlns:metal="http://xml.zope.org/namespaces/metal"
xmlns:i18n="http://xml.zope.org/namespaces/i18n"
metal:use-macro="here/main_template/macros/master"
i18n:domain="Plone"
xml:lang="en"
lang="en">

<div
    metal:fill-slot="main"
    tal:content="structure:view/data"
/>

</html>
Run Code Online (Sandbox Code Playgroud)

任何使用变色龙的客户端视图

from five import grok
from zope.interface import Interface
from grokcore.chameleon.components import ChameleonPageTemplate

from common import insert_into_master

class MyView(grok.View):
    grok.context(Interface)
    grok.require('zope2.View')
    grok.name('myview')

    def …
Run Code Online (Sandbox Code Playgroud)

plone chameleon

2
推荐指数
1
解决办法
245
查看次数

使用 Plone 调用 grok.View 时,self.redirect 会导致 TypeError

我一直在使用简单的 grok 和 Plone 4.1.4。到目前为止,我尝试了从这里获取的1.2.0 和 1.1.1 版本的已知良好配置五.grok

我尝试将 grok.View 与重定向一起使用,并且每当运行重定向代码 (self.redirect('url')) 时,就会引发以下 TypeError:

TypeError: redirect() got an unexpected keyword argument 'trusted'
> /home/alex/projects/eggs/grokcore.view-1.13.5-py2.6.egg/grokcore/view/components.py(50)redirect()
-> url, status=status, trusted=trusted)
Run Code Online (Sandbox Code Playgroud)

我发现这个讨论涉及类似的问题,但没有真正的解决方案。马尼

重现错误真的很容易,只需在 grok.View 派生类中有一个更新方法。

from five import grok
from Products.CMFCore.interfaces import ISiteRoot
class RedirectTest(grok.View):
    grok.context(ISiteRoot)
    grok.require('zope2.View')
    grok.name('testredirect')
    def update(self):
        self.redirect(self.url(''))
    def render(self):
        self.redirect(self.url(''))
Run Code Online (Sandbox Code Playgroud)

python plone grok

1
推荐指数
1
解决办法
205
查看次数