小编Phi*_*ord的帖子

无法输入React输入文本字段

我正在尝试我的第一部分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)

javascript reactjs

95
推荐指数
5
解决办法
9万
查看次数

使用Ansible set_fact从寄存器结果创建字典

在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)

我想这可能是可能的,但到目前为止我还没有运气.

ansible

57
推荐指数
2
解决办法
8万
查看次数

为什么我的Django单元测试不知道MessageMiddleware是否已安装?

我正在研究一个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.我不知道为什么,或者这是否是问题的原因.

django unit-testing middleware messages

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

如何在类方法中模拟python的datetime.now()进行单元测试?

我正在尝试为具有以下方法的类编写测试:

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;我不确定这是否会对这种情况产生影响.)

python testing django unit-testing mocking

38
推荐指数
4
解决办法
2万
查看次数

如何使用pip卸载git repo?

我在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版本.)

git pip

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

Django - 如何将多个参数传递给url模板标记

在我的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模板标记?

django django-templates django-urls

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

如何重置PostgreSQL表上的ID序列

我最近将旧数据库中的大量数据导入到新的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 postgresql

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

django-compressor没有在Heroku上设置绝对CSS图像路径

我正在使用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 amazon-s3 django-compressor

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

在AppConfig的ready()方法中注册Django系统检查

在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()方法?

django

15
推荐指数
2
解决办法
1774
查看次数

在Ansible中,如何将来自单独文件的变量组合成一个数组?

在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数组的方法.

如果这是制作这样的东西的唯一方法,我愿意稍微重新排列.

ansible

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