说,我有一个类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的一些变体)
问题是:在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的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) 我遇到了以下错误:
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)
我究竟做错了什么?