小编Ale*_*der的帖子

如何使用多个参数覆盖Python类的构造函数?

说,我有一个类Foo,扩展类Bar.我想稍微改写Foo的指导者.而且我甚至不想知道Bar的构造函数是什么.有没有办法做到这一点?

如果你不明白,我的意思是:

class Bar:
   def __init__ (self, arg1=None, arg2=None, ... argN=None):
      ....


class Foo (Bar):
    #Here i just want add additional parameter to constructor, but don't want to know anything about Bar's other parameters (arg1, arg2..., argN)
    def __init__ (self, my_new_arg=None, ??? )
       self.new_arg = my_new_arg
       Bar.__init__(self, ??? )
Run Code Online (Sandbox Code Playgroud)

有没有办法把简短而优雅的东西放在??? 在这段代码?(可能是args/kwargs的一些变体)

python constructor

26
推荐指数
2
解决办法
3万
查看次数

如何在Django模板中指定URL?

问题是:在Django模板中编写URL的正确方法是什么?

如果我明确地写它们(像这样):

some_template.html

{% extends "base.html" %}
{% block someblock %}
    <a href="/some_url">Anchor</a>
{% endblock someblock %}
Run Code Online (Sandbox Code Playgroud)

然后我决定改变我的URL方案我将不得不改变它们 - template和urls.py模块(似乎这种方式与DRY原则冲突)

另一种方法是使用变量(像这样):

some_template.html

{% extends "base.html" %}
{% block someblock %}
    <a href="{{ url_var }}">Anchor</a>
{% endblock someblock %}


views.py

def some_url (request):
    return HttpResponse('Hello, world!')

def another_url (request):
    return render_to_response('some_template.html', {'url_var': reverse('some_url')}
Run Code Online (Sandbox Code Playgroud)

但在这种情况下,如果我使用模板继承,我必须在上下文中指定所有url变量(也用于父模板).可能它也不是一个好方法.

那么决定是什么?

django templates

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

Python:在包装函数中使用*args,**kwargs

我正在为Django的render_to_response()编写一个包装函数来添加CSRF处理.

逻辑是:

def some_view (request)
    dictionary = {'context_param': some_param}
    dictionary.update(csrf(request))
    # ... view code here
    return render_to_response("a_template.html", dictionary)
Run Code Online (Sandbox Code Playgroud)

render_to_response()具有以下签名:

def render_to_response(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

我想写透明包装器 - 只需添加一些功能(前面提到过)并保留其他内容.我想我应该写这样的东西:

def csrf_response (request, *args, **kwargs):

    # Here I need to somehow extract dictionary from args or kwargs

    if dictionary is None:
        dictionary = {}
    dictionary.update(csrf(request))

    # And here I somehow need to pass dictionary into render_to_response() fot the furher processing
    return render_to_response(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

所以问题是 - 从args/kwargs中提取所需参数(然后更改它)并将其进一步传递的最佳实践是什么?

render_to_response()的BTW代码似乎有点奇怪.这里是:

def render_to_response(*args, **kwargs):
    """
    Returns a HttpResponse whose …
Run Code Online (Sandbox Code Playgroud)

django args wrapper kwargs render-to-response

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

Python:使用嵌套类时的NameError

我遇到了以下错误:

NameError: name 'JsonCleaner' is not defined
Run Code Online (Sandbox Code Playgroud)

导致错误的行是字典中的第一对ERROR_CODES_MAPPING_DICT(参见下面的代码):

from sshop.engine.models import WrongJsonError

class JsonCleaner:


    class NormalizeError(Exception):

        ERROR_NO_CODE = 0
        ERROR_TYPE_MISMATCH = 1
        ERROR_WRONG_VALUE = 2
        ERROR_LACK_OF_FIELD = 3

        def __init__(self, error_desc, error_code=ERROR_NO_CODE):
            self.error_desc = error_desc
            self.error_code = error_code

        def __unicode__(self):
            return repr(self.error_desc)


    # .... some methods ........


    ERROR_CODES_MAPPING_DICT = {
        # Line where exception is raised:
        JsonCleaner.NormalizeError.ERROR_NO_CODE:       WrongJsonError.NO_ERROR, 
        JsonCleaner.NormalizeError.ERROR_LACK_OF_FIELD: WrongJsonError.ERROR_LACK_OF_FIELD,
        JsonCleaner.NormalizeError.ERROR_TYPE_MISMATCH: WrongJsonError.ERROR_TYPE_MISMATCH,
        JsonCleaner.NormalizeError.ERROR_WRONG_VALUE:   WrongJsonError.ERROR_WRONG_VALUE, 
    }
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

python

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