小编Hou*_*man的帖子

Jinja在HTML中渲染文本,保留换行符

我有一个这样的简单形式:

class RecordForm(Form):    
    notes = TextAreaField('Notes')
Run Code Online (Sandbox Code Playgroud)

我将数据记录在三个段落中,如下所示:

para1

para2

para3
Run Code Online (Sandbox Code Playgroud)

在模板中,我希望以只读方式查看该记录的内容.(不可编辑的形式)

记录是这种情况下包含数据的模型:

<td>{{ record.notes }}</td>
Run Code Online (Sandbox Code Playgroud)

- >

<td>para1 para2 para3</td>
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能显示多行?

python jinja2 flask

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

单元测试Viewmodel

我是TDD的新手.我已经开始在视图模型上创建我需要的属性作为普通的自动属性.

public string Firstname { get; set; }
Run Code Online (Sandbox Code Playgroud)

然后我创建了一个测试

[TestMethod]
[Tag("Property")]
public void FirstNameTest()
{
    ViewModel = new CustomerViewModel();
    ViewModel.PropertyChanged += (s, e) =>
                                     {
                                         Assert.AreEqual("Firstname", e.PropertyName);
                                         Assert.AreEqual("Test", ViewModel.Firstname);
                                     };
    ViewModel.Firstname = "Test";
}
Run Code Online (Sandbox Code Playgroud)

然后我会扩展实际的实现,使测试通过这样:

public string Firstname
{
    get { return _contact.FirstName; }
    set
    {
        if (_contact.FirstName == value)
            return;

        _contact.FirstName = value;

        RaisePropertyChanged(() => Firstname);
    }
}
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是测试仍然传递给Aut属性.任何提示,如何我可以改善我的过程?

.net c# silverlight tdd unit-testing

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

如何通过Reflection获取属性的DisplayAttribute?

我有一个像这样的Helper方法来获取PropertyName(试图避免魔术字符串)

public static string GetPropertyName<T>(Expression<Func<T>> expression)
        {
            var body = (MemberExpression) expression.Body;
            return body.Member.Name;
        }
Run Code Online (Sandbox Code Playgroud)

但有时我的PropertyNames也没有好好命名.所以我想宁愿使用DisplayAttribute.

[Display(Name = "Last Name")]
public string Lastname {get; set;}
Run Code Online (Sandbox Code Playgroud)

请注意我使用的是Silverlight 4.0.我无法找到通常的命名空间DisplayAttributeName属性.

如何更改我的方法来读取eproperty的属性(如果可用)?

非常感谢,

.net c# reflection silverlight

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

如何解决不同浏览器的占位符CSS差异?

我正在使用Twitter bootstrap CSS.您可以在下面看到相同的代码与FireFox和Chrome的显示方式有何不同.

这很奇怪.Firebug告诉我,占位符的css设置为浅灰色:

:-moz-placeholder {
    color: #999999;
}
Run Code Online (Sandbox Code Playgroud)

这应该影响所有元素中的所有占位符,因为它在Chrome中正确完成.但在Firefox中为什么要textareas正确应用,但input不是吗?我怎样才能解决这个问题?

<input id="id_referred_by" type="text" maxlength="50" name="referred_by" placeholder="...was referred by?">

<textarea id="id_contacts_interests" name="contacts_interests" cols="40" placeholder="Any particular interests?" rows="4"></textarea>
Run Code Online (Sandbox Code Playgroud)

铬:

在此输入图像描述

火狐:

在此输入图像描述

更新:

以下评论给了我一个想法:

Input不同于划掉textareacolor: #9999条目,这意味着有些东西会覆盖它.

select, textarea, input[type="text"], input[type="password"], input[type="datetime"], input[type="datetime-local"], input[type="date"], input[type="month"], input[type="time"], input[type="week"], input[type="number"], input[type="email"], input[type="url"], input[type="search"], input[type="tel"], input[type="color"], .uneditable-input {
    color: #555555;
    display: inline-block;
    font-size: 13px;
    height: 18px;
    line-height: 18px;
    margin-bottom: 9px;
    padding: 4px;
}
Run Code Online (Sandbox Code Playgroud)

事实上就是这样color: #555555;.当我在firebug中禁用它时,一切正常.Chrome怎么没关心这个,但Firefox呢?有关如何在两种浏览器中修复此问题的任 我还是css的新手.

css placeholder twitter-bootstrap

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

Django:Disabled Dropdown不会将信息发送回POST

我在模型中有一个下拉列表,用户不应该更改所选的值.我发现a disabled确实做到了我需要的东西.然而,这有点奇怪:

表单打开(GET)时第一次选择该值,用户无法更改该值.这很棒:

在此输入图像描述

但是一旦出现验证错误unrelated field并且POST将用户返回到同一表单,之前的信息就会丢失.禁用的外键 - 下拉列表不再包含任何值,并且非常恼人.

在此输入图像描述

我做了一些研究并在stackoverflow上找到了一些东西,并且似乎在禁用了foreignkey-dropdown小部件时,根本没有发回任何数据.虽然可以覆盖验证,但不会为下拉字段抛出任何错误,因为这里第三个答案解释了.但是,如果任何其他不相关的字段抛出错误,则数据将丢失,因为禁用的下拉列表从未在第一时间向POST发送任何数据.

这是一个棘手的情况.

有没有办法将视图中的数据传递给request.POST?或者你的建议是什么?我可以使用a readonly而不是也可以使用disabled,但是用户可以更改下拉列表,这也很烦人.

有任何想法吗?非常感谢

编辑:

小修正:数据没有完全丢失.而是将选择错误地设置为初始虚拟值.

    <select id="id_form-0-deal_type" name="form-0-deal_type" disabled="disabled">
      <option selected="selected" value="">---------</option>
      <option value="1">deal 1</option>
      <option value="2">deal 2</option>
    </select>
Run Code Online (Sandbox Code Playgroud)

更新:

弗朗西斯的解决方案看起来非常有前景.所以我尝试了他的第二个建议,并在html中添加了一个隐藏的输入字段,并将正确的值传递给POST.

问题是现在如何进行.我试图像这样在formset的形式的querydict中添加缺少的条目(为了设置正确的下拉值)

formset.forms[0].data['form-0-deal_type'] = formset.forms[0].data['form-0-hiddenfield'] 
Run Code Online (Sandbox Code Playgroud)

但它说 This QueryDict instance is immutable

唯一的另一种方法是使用常规表单集将其设置为Initials.不幸的是我使用的是modelformsets,它不支持现有表单的首字母.

如果没有其他解决方案,我开始将我的modelformset重构为常规formset.仍然愿意接受...

最终更新+解决方案:

无需将modelformset重构为常规fomsets.事实上,我非常不鼓励这样做,因为它带来了其他问题.modelformsets为您处理所有事情并填补缺失的部分.

实际的问题是QueryDict是不可变的,但这可以通过复制它们轻松解决:

formset = deal_formset(request.POST, queryset=formset_query)        
if formset.is_valid():
  pass
else:
  new_post = request.POST.copy()
  deal_types = dict()
  for k,v in new_post.items():
     if …
Run Code Online (Sandbox Code Playgroud)

python django

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

如何将<td>限制为仅三行?

我希望在我的所有表行中实现统一的外观.当你看下面我的例子时,你可以看到中间的音符超过了4行而且不那么漂亮.

在此输入图像描述

我希望将所有内容限制<td>为3行.

如果要显示的内容多于三行,那么它应该剪切内容... [click for more]并将内容放在可折叠元素中,这样当单击它时它将显示整个内容.

后者应该不是问题,但如何将内容限制为仅三行?我应该算一下角色来做出决定吗?有更好的策略吗?我顺便使用Django,但我很乐意使用javascript,jquery或任何css魔法来解决这个问题.

更新:

接受的答案非常好.然而,它带有一个警告,这是不容易解决的.如果你的邻居td已超过三行,而当前的td只有两行,我们将得到一个无限的while循环.

在此输入图像描述

while($(this).innerHeight() / $(this).css('line-height').slice(0,-2) >= 3){ .. }
Run Code Online (Sandbox Code Playgroud)

由于$(this).innerHeight()相邻的单元格保持高度不能降低.我想如果有可能得到当前td的css并将其完全复制到一个单独的字段中,其中相邻的tds不会干扰,我们将获得最佳解决方案.

更新2:

正如阿萨德所提到的,解决方案是在内容周围放置一个div包装器td,并将类设置在div内部td而不是td自身上.它完美无瑕.

html javascript css django jquery

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

如何在提交之前查看文件的更改?

我试过了 git commit -v

ubuntu@ip:~/agile$ git commit -v
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   .htaccess
#
no changes added to commit (use "git add" and/or "git commit -a")
ubuntu@ip:~/agile$ 
Run Code Online (Sandbox Code Playgroud)

但它只是告诉我.htaccess已经改变了,但没有改变.我该如何实现这一目标?

更新: 在Aptana Studio中,可以提交任何内容之前查看更改.回到我的问题,在实际提交之前,必须有一种方法可以看到原始状态的差异.也许有一个不同的命令.

git

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

Django:如何设置models.TextField()的最小长度?

有似乎是一个max_lengthCharField只.但是min_length对于a来说TextField(),有没有办法强制执行100个字符TextField

forms django

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

Pydantic 2.0 忽略 schema 中的Optional并要求该字段可用

Pydantic 2.0 似乎发生了巨大的变化。

以前使用 FastAPI 和 Pydantic 1.XI 可以像这样定义模式,其中收据是可选的:

class VerifyReceiptIn(BaseModel):
    device_id: str
    device_type: DeviceType
    receipt: Optional[str]
Run Code Online (Sandbox Code Playgroud)

然后在 FastAPI 端点中我可以这样做:

@router_verify_receipt.post(
    "/",
    status_code=201,
    response_model=VerifyReceiptOut,
    responses={201: {"model": VerifyReceiptOut}, 400: {"model": HTTPError}},
)
async def verify_receipt(body: VerifyReceiptIn):
    auth_service = AuthService()
    ...

Run Code Online (Sandbox Code Playgroud)

没有体内收据的单元测试没问题,但现在 Pydantic 2.0 失败了。现在它声称需要收据并抛出 422 错误。

response = await client.post(
            "/verify-receipt/",
            headers={"api-token": "abc123"},
            json={
                "device_id": "u1",
                "device_type": DeviceType.ANDROID.value,
            },
        )
Run Code Online (Sandbox Code Playgroud)

但这就是为什么我们有可选的。为什么我必须通过receipt=None身体?这并不理想,因为它会破坏生产中的一切。有没有解决的办法?谢谢

pydantic fastapi

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

如何使用flask.url_for()和flask-restful?

我已经像这样设置了Flask:

api = Api(app, decorators=[csrf_protect.exempt])
api.add_resource(FTRecordsAPI,
                 '/api/v1.0/ftrecords/<string:ios_sync_timestamp>',
                 endpoint="api.ftrecord")
Run Code Online (Sandbox Code Playgroud)

我想在内部重定向到端点api.ftrecord.

但是我尝试这样做的那一刻:

base_url = flask.url_for('api.ftrecord')
Run Code Online (Sandbox Code Playgroud)

我得到一个例外.

  File "/Users/hooman/workspace/F11A/src/lib/werkzeug/routing.py", line 1620, in build
    raise BuildError(endpoint, values, method)
BuildError: ('api.ftrecord', {}, None)
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

python flask flask-restful

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