我正在尝试我的第一部分React.js并且很早就被我难倒...我有下面的代码,它会将搜索表单转换为<div id="search"></div>.但是在搜索框中输入什么也不做.
据推测,通过道具和状态上下都会丢失一些东西,这似乎是一个常见的问题.但我很难过 - 我看不出有什么遗漏.
var SearchFacet = React.createClass({
handleChange: function() {
this.props.onUserInput(
this.refs.searchStringInput.value
)
},
render: function() {
return (
<div>
Search for:
<input
type="text"
value={this.props.searchString}
ref="searchStringInput"
onchange={this.handleChange} />
</div>
);
}
});
var SearchTool = React.createClass({
render: function() {
return (
<form>
<SearchFacet
searchString={this.props.searchString}
onUserInput={this.props.onUserInput}
/>
<button>Search</button>
</form>
);
}
});
var Searcher = React.createClass({
getInitialState: function() {
return {
searchString: ''
}
},
handleUserInput: function(searchString) {
this.setState({
searchString: searchString
})
},
render: function() {
return …Run Code Online (Sandbox Code Playgroud) 在Ansible中,我曾经register在变量中保存任务的结果people.省略我不需要的东西,它有这样的结构:
{
"results": [
{
"item": {
"name": "Bob"
},
"stdout": "male"
},
{
"item": {
"name": "Thelma"
},
"stdout": "female"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我想使用后续set_fact任务用这样的字典生成一个新变量:
{
"Bob": "male",
"Thelma": "female"
}
Run Code Online (Sandbox Code Playgroud)
我想这可能是可能的,但到目前为止我还没有运气.
我正在研究一个Django项目并正在为它编写单元测试.但是,在测试中,当我尝试登录用户时,我收到此错误:
MessageFailure: You cannot add messages without installing django.contrib.messages.middleware.MessageMiddleware
Run Code Online (Sandbox Code Playgroud)
登录实际站点工作正常 - 并使用MessageMiddleware显示登录消息.
在我的测试中,如果我这样做:
from django.conf import settings
print settings.MIDDLEWARE_CLASSES
Run Code Online (Sandbox Code Playgroud)
然后它输出:
('django.middleware.cache.UpdateCacheMiddleware',
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware',
'debug_toolbar.middleware.DebugToolbarMiddleware')
Run Code Online (Sandbox Code Playgroud)
这似乎表明在运行测试时安装了MessageMiddleware.
我有一个明显的步骤吗?
UPDATE
根据下面的建议,它确实看起来像是一个设置的东西.
我目前settings/__init__.py喜欢这个:
try:
from settings.development import *
except ImportError:
pass
Run Code Online (Sandbox Code Playgroud)
并settings/defaults.py包含大部分标准设置(包括MIDDLEWARE_CLASSES).然后settings.development.py覆盖其中一些默认值,如下所示:
from defaults import *
DEBUG = True
# etc
Run Code Online (Sandbox Code Playgroud)
使用开发设置看起来我的开发站点本身工作正常.但是,虽然测试似乎加载设置OK(默认和开发)settings.DEBUG设置为False.我不知道为什么,或者这是否是问题的原因.
我正在尝试为具有以下方法的类编写测试:
import datetime
import pytz
class MyClass:
def get_now(self, timezone):
return datetime.datetime.now(timezone)
def do_many_things(self, tz_string='Europe/London'):
tz = pytz.timezone(tz_string)
localtime_now = self.get_now(tz)
...
return things
Run Code Online (Sandbox Code Playgroud)
我想测试它,为此我需要确保datetime.datetime.now()调用返回可预测的内容.
我一直在阅读很多在测试中使用Mock的例子,但是没有发现任何我需要的东西,我无法弄清楚如何在我的测试中使用它.
我把get_now()方法分开了,以防它更容易嘲笑,而不是datetime.datetime.now(),但我仍然难倒.有关如何使用Mock为此编写UnitTests的任何想法?(这一切都在Django,fwiw;我不确定这是否会对这种情况产生影响.)
我在virtualenv中使用pip,并通过这样做从git repo安装了一个包:
pip install -e git://github.com/dwaiter/django-bcrypt.git@475a3bef1e3ff31935a2dc905e244a63a804fce9#egg=django_bcrypt-dev
Run Code Online (Sandbox Code Playgroud)
但是我现在想要卸载它并且看不清楚,因为它没有传统的包名.我尝试了一些看起来很明显的变化(比如将'install'替换为'uninstall'),但是无法从文档中看到如何做到这一点.
(在这种情况下,我最终想从django-bcrypt的git repo版本升级到版本0.9.2,并假设我需要先卸载git版本.)
在我的urls.py中,我有:
(r'^(?P<year>\d{4})/(?P<month>\d{2})/(?P<day>\d{2})/section/(?P<slug>[-\w]+)/$',
'paper.views.issue_section_detail',
{},
'paper_issue_section_detail'
),
Run Code Online (Sandbox Code Playgroud)
而我正在尝试在模板中执行此操作:
{% url paper_issue_section_detail issue.pub_date.year,issue.pub_date.month,issue.pub_date.day,section_li.slug %}
Run Code Online (Sandbox Code Playgroud)
但我得到这个错误:
TemplateSyntaxError
Caught an exception while rendering: Reverse for 'paper_issue_section_detail' with arguments '(2010, 1, 22, u'business')' and keyword arguments '{}' not found.
Run Code Online (Sandbox Code Playgroud)
但是,如果我将URL模式更改为只需要一个参数,它就可以正常工作.即:
(r'^(?P<year>\d{4})/$',
'paper.views.issue_section_detail',
{},
'paper_issue_section_detail'
),
Run Code Online (Sandbox Code Playgroud)
和:
{% url paper_issue_section_detail issue.pub_date.year %}
Run Code Online (Sandbox Code Playgroud)
所以当我使用'url'模板标签传递多个参数时似乎抱怨 - 我用两个参数得到了相同的错误.是否有不同的方式来传递几个参数?我尝试传入命名关键字参数,并生成类似的错误.
对于它的价值,相关视图如下所示:
def issue_section_detail(request, year, month, day, slug):
Run Code Online (Sandbox Code Playgroud)
如何将多个参数传递给url模板标记?
我最近将旧数据库中的大量数据导入到新的Postgresql数据库中,作为新Django站点中模型的基础.
我使用旧数据库中的ID(因为各个表中的行互相引用),但它们并非都是顺序的 - 通常存在很大的差距.
我注意到,当我通过Django应用程序添加一个新对象时,它一直使用从1开始的ID,这对于没有ID非常低的行来说并不是问题.
但是一旦它到达第一行遗留数据,那么postgres显然会抱怨:
ERROR: duplicate key value violates unique constraint "django_comments_pkey"
DETAIL: Key (id)=(25) already exists.
Run Code Online (Sandbox Code Playgroud)
查看表格描述我猜我需要在每个表格上重置某种序列:
Table "public.django_comments"
Column | Type | Modifiers
-----------------+--------------------------+--------------------------------------------------------------
id | integer | not null default nextval('django_comments_id_seq'::regclass)
...
Run Code Online (Sandbox Code Playgroud)
我需要做什么来重置该序列,以便添加ID高于当前最大ID的新行?
我正在使用django-compressor来连接和压缩我在这个站点上的CSS和JS文件.我正在从S3存储桶提供静态文件.
在我的本地网站副本上,使用不同的S3存储桶,这一切都很完美.但是在Heroku上托管的实时网站上,除了 CSS文件中图像的相对URL不会被重写之外,它都可以工作.
例如,CSS文件中的这一行:
background-image: url("../img/glyphicons-halflings-grey.png");
Run Code Online (Sandbox Code Playgroud)
被重写为:
background-image:url('https://my-dev-bucket-name.s3.amazonaws.com/static/img/glyphicons-halflings-grey.png')
Run Code Online (Sandbox Code Playgroud)
在我的开发网站上,但没有触及现场网站.因此,实时站点最终会查找pepysdiary.s3.amazonaws.com/static/CACHE/img/图像(因为它与新的压缩CSS文件相关).
现在,我已经在包含图像的位置放了一个目录,但我无法弄清楚为什么会有这种差异.两个网站都在他们的设置中有这个:
COMPRESS_CSS_FILTERS = [
# Creates absolute urls from relative ones.
'compressor.filters.css_default.CssAbsoluteFilter',
# CSS minimizer.
'compressor.filters.cssmin.CSSMinFilter'
]
Run Code Online (Sandbox Code Playgroud)
并且CSS文件正在被最小化......但是就像其他过滤器没有在实际站点上应用.
在Django的系统检查框架的文档中,它说:
检查应该在加载应用程序时加载的文件中注册; 例如,在该
AppConfig.ready()方法中.
该页面上或该AppConfig.ready()方法周围的示例都没有显示如何执行此操作.给出一个检查方法,如:
from django.core.checks import register, Tags
@register(Tags.compatibility)
def my_check(app_configs, **kwargs):
# ... perform compatibility checks and collect errors
return errors
Run Code Online (Sandbox Code Playgroud)
你会如何在AppConfig.ready()方法中执行此操作?是从另一个叫来的吗?上面的方法应该进入哪个文件?你添加@register(...)的ready()方法?
在Ansible,在一个角色中,我有这样的vars文件:
vars/
app1.yml
app2.yml
Run Code Online (Sandbox Code Playgroud)
每个文件都包含特定于应用程序/网站的变量,如下所示:
name: app1
git_repo: https://github.com/philgyford/app1.git
# ...
Run Code Online (Sandbox Code Playgroud)
理想情况下,如果没有预先知道哪些应用程序具有可变文件的任务,我最终会得到一个apps如下所示的数组:
apps:
- name: app1
git_repo: https://github.com/philgyford/app1.git
# ...
- name: app2
git_repo: https://github.com/philgyford/app2.git
# ...
Run Code Online (Sandbox Code Playgroud)
即,它将文件中的变量合并为一个.
我知道我可以像这样加载所有变量文件:
- name: Load var files
with_fileglob:
- ../vars/*.yml
include_vars: '{{ item }}'
Run Code Online (Sandbox Code Playgroud)
但是,鉴于每个文件具有相同的变量名称,它将覆盖每个先前的变量集.我看不到加载变量并将它们放入apps数组的方法.
如果这是制作这样的东西的唯一方法,我愿意稍微重新排列.
django ×6
ansible ×2
unit-testing ×2
amazon-s3 ×1
django-urls ×1
git ×1
javascript ×1
messages ×1
middleware ×1
mocking ×1
pip ×1
postgresql ×1
python ×1
reactjs ×1
testing ×1