我在Django项目中测试Jinja2并且有一个奇怪的输出.当我渲染表单时,一些字符是HTML编码的(< >
等等)
在模板中:
{{ form.as_p() }}
Run Code Online (Sandbox Code Playgroud)
它呈现给浏览器:
<p><label for="id_username">Utilisateur:</label> <input autocomplete="off" id="id_username" type="text" name="username" maxlength="100" /></p> <p><label for="id_password">Mot de passe:</label> <input autocomplete="off" type="password" name="password" id="id_password" /></p>
Run Code Online (Sandbox Code Playgroud)
看来源:
&lt;p&gt;&lt;label for=&quot;id_username&quot;&gt;Utilisateur:&lt;/label&gt; &lt;input autocomplete=&quot;off&quot; id=&quot;id_username&quot; type=&quot;text&quot; name=&quot;username&quot; maxlength=&quot;100&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;label for=&quot;id_password&quot;&gt;Mot de passe:&lt;/label&gt; &lt;input autocomplete=&quot;off&quot; type=&quot;password&quot; name=&quot;password&quot; id=&quot;id_password&quot; /&gt;&lt;/p&gt;
Run Code Online (Sandbox Code Playgroud)
有谁知道这个问题?
所以我创建了一个名为'coolprojectsite'的django项目,目录结构如下所示:
* media (dir)
* mytemplates (dir)
* * admin (dir)
* * coolprojects (dir)
* coolprojectsite (dir)
* * coolproject (dir)
* * * __init__.py
* * * admin.py
* * * models.py
* * * tests.py
* * * urls.py
* * * views.py
* * __init__.py
* * settings.py
* * urls.py
Run Code Online (Sandbox Code Playgroud)
所以我有几个问题.
1)coolprojectsite被认为是'项目'
2)coolproject是否被认为是"应用程序"
3)'media'包含css,javascript文件等.这是适合他们的地方吗?它在项目之外.
4)'mytemplates'具有包含django标记的特定文件(例如{%%}),因为我的urls.py指向它们,所以它们被访问.将这些文件放在项目之外是否合适?
5)如果我想要包含一些任意的javascript文件(比如说jquery),我只是在urls.py中创建一个新条目(如果是的话,应该是coolprojectsite中的那个,还是coolproject)然后链接到那个url?
我正在构建用于Python中的表单验证的DSL,其中一个要求是能够指定字段应该大于或小于常量或另一个字段值.其结果是,我想运营商轻松地映射像<
,>
,<=
并且>=
将在它们的同等功能operator
模块,使他们可以现场验证过程中被调用.
我意识到我可以创建一个字典来将操作符映射到函数,但是有更好的方法吗?有没有办法访问Python的内置映射?
我有一个数据库,其中包含多个包含一些信息的字段的记录.
要使表中的所有数据与某个过滤器匹配,我会这样做:
records = Record.objects.filter(fieldA='a')
Run Code Online (Sandbox Code Playgroud)
我想,记录是一个QuerySet对象,包含一个记录的"列表".那是对的吗?
现在让我们说我想在一个字段中列出值.
如果我这样做:
records = Record.objects.filter(fieldA='a').only('fieldB')
Run Code Online (Sandbox Code Playgroud)
我仍然得到一个查询集,但现在它有一些延迟字段.我想要的只是我想要抓住又名字段B的值的列表.我还希望能够获取fieldB的不同值.我想我可以迭代每条记录,拉出fieldB,如果它已经存在就把它添加到列表中,就在那里,但是必须有更好的方法.
谢谢!
编辑:我认为我正在寻找的是
Record.objects.values_list('fieldB')
Run Code Online (Sandbox Code Playgroud) 如何在基于Classed的通用视图中访问request.user?
这是代码:
class TodayView(TemplateView):
template_name = "times/today.html"
if Records.objects.all().count() > 0:
last_record = Records.objects.latest('id')
else:
last_record = None
actual_time = datetime.today()
activities = Activity.objects.filter(owner=request.user)
def get_context_data(self, **kwargs):
context = super(TodayView, self).get_context_data(**kwargs)
context["today"] = self.actual_time
return context
Run Code Online (Sandbox Code Playgroud)
现在,我得到错误"请求未定义",如果我写"self.request.user",我得到"自我"没有定义,这是可以理解的.我可以想到几种方法来解决这个问题,但我想知道是否存在关于如何在Django Classed Based Generic Views上访问request.user的标准化/共识.
>import tensorflow
>import tensorflow.contrib
>tensorflow.contrib
module 'tensorflow.contrib' from 'D:\\ProgramData\\Anaconda3\\lib\\site-packages\\tensorflow\\contrib\\__init__.py'
>import tensorflow.python
>tensorflow.python
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: module 'tensorflow' has no attribute 'python'
Run Code Online (Sandbox Code Playgroud)
如您所见,我在cmd(win 10)中运行此代码."import tensorflow.contrib"和"import tensorflow.python"都可以,但命令"tensorflow.contrib"和"tensorflow.python"是不同的.一个返回一个目录,另一个返回AttributeError.
有没有人知道为什么?
我刚刚安装了pip附带的python 3.6
但是,在Windows命令提示符下,当我执行:'pip install bs4'时,它会在安装字下面返回'SyntaxError:invalid syntax'.
键入'python'会返回版本,这意味着它已正确安装.可能是什么问题呢?
我在这个问题上遇到了一些麻烦,request.data 有时是一个dict
(尤其是在测试时),有时是一个QueryDict
实例(使用 curl 时)。
这尤其是一个问题,因为在使用 curl 调用视图时显然存在很大差异,如下所示:
curl -X POST --data "some_float=1.23456789012123123" "http://localhost:8000/myview"
Run Code Online (Sandbox Code Playgroud)
或者像这样使用 django_webtest 客户端:
class APIViewTest(WebTest):
def test_testsomething(self):
self.app.post(url=url, params=json.dumps({some_float=1.26356756467}))
Run Code Online (Sandbox Code Playgroud)
然后将该 QueryDict 转换为这样的字典
new_dict = dict(**request.data)
my_float = float(new_dict['some_float'])
Run Code Online (Sandbox Code Playgroud)
在测试中一切正常,因为有request.data
一个dict
,但在生产中,视图崩溃了,因为new_dict['some_float']
实际上是一个包含一个元素的列表,而不是预期的浮点数。
我已经考虑过像这样解决这个问题:
if type(request.data) is dict:
new_dict = dict(**request.data)
else:
new_dict = dict(**request.data.dict())
Run Code Online (Sandbox Code Playgroud)
这感觉非常错误,因为测试只会测试第 2 行,并且(一些?全部?)生产代码将运行第 4 行。
因此,当我想知道为什么 QueryDict 会以这种方式运行时,我宁愿知道为什么以及何时 response.data 是 a QueryDict
。以及我如何使用 django 测试来模拟这种行为。生产和测试系统有不同的条件总是很麻烦,有时是不可避免的,但在这种情况下,我觉得它可以解决。或者这是与 django_webtest 相关的特定问题?
我想在ModelForm的帮助下创建一个编辑表单.
我的模型包含一个通用的关系黑白类,所以如果任何人可以建议我的视图和一些模板的目的我会非常感激,因为我是该语言的新手.
我的模特看起来像: -
class Employee(Person):
nickname = models.CharField(_('nickname'), max_length=25, null=True,
blank=True)
blood_type = models.CharField(_('blood group'), max_length=3, null=True,
blank=True, choices=BLOOD_TYPE_CHOICES)
marital_status = models.CharField(_('marital status'), max_length=1,
null=True, blank=True, choices=MARITAL_STATUS_CHOICES)
nationality = CountryField(_('nationality'), default='IN', null=True,
blank=True)
about = models.TextField(_('about'), blank=True, null=True)
dependent = models.ManyToManyField(Dependent,
through='DependentRelationship')
pan_card_number = models.CharField(_('PAN card number'), max_length=50,
blank=True, null=True)
policy_number = models.CharField(_('policy number'), max_length=50,
null=True, blank=True)
# code specific details
user = models.OneToOneField(User, blank=True, null=True,
verbose_name=_('user'))
class Person(models.Model):
"""Person model"""
title = models.CharField(_('title'), max_length=20, null=True, blank=True)
first_name = …
Run Code Online (Sandbox Code Playgroud) 我知道这是错误的事情,但我使用的是python 3但是用python 2书来研究它.
它说,
>>>range(2,7)
Run Code Online (Sandbox Code Playgroud)
将会呈现
[2,3,4,5,6]
Run Code Online (Sandbox Code Playgroud)
但我知道它不会显示上面的输出,我想.所以我试过了:
>>>>print(range(2,7))
Run Code Online (Sandbox Code Playgroud)
和ta-da-它显示如下:
range(2,7)
Run Code Online (Sandbox Code Playgroud)
看起来这是从P2到P3的变化之一所以我试过:
list(range(2,7))
Run Code Online (Sandbox Code Playgroud)
这个可以在IDLE上运行正常,但在记事本上用于长编码也不行.所以最后我试过了:
print(list(range(2,7)))
Run Code Online (Sandbox Code Playgroud)
它显示出类似于我的意图...我做得对吗?这是写它的唯一方法吗?