小编Art*_*owy的帖子

Django模板:选择的详细版本

我有一个模特:

from django.db import models

CHOICES = (
    ('s', 'Glorious spam'),
    ('e', 'Fabulous eggs'),
)

class MealOrder(models.Model):
    meal = models.CharField(max_length=8, choices=CHOICES)
Run Code Online (Sandbox Code Playgroud)

我有一个表格:

from django.forms import ModelForm

class MealOrderForm(ModelForm):
    class Meta:
        model = MealOrder
Run Code Online (Sandbox Code Playgroud)

我想使用formtools.preview.默认模板打印选择的短版本('e'而不是'Fabulous eggs'),因为它使用

{% for field in form %}
<tr>
<th>{{ field.label }}:</th>
<td>{{ field.data }}</td>
</tr>
{% endfor %}.
Run Code Online (Sandbox Code Playgroud)

我想要一个像上面提到的一般模板,但是打印'Fabulous eggs'代替.

[因为我怀疑真正的问题在哪里,我为所有人加粗了:)]

我知道如何以一种本身丑陋的方式获得一个选择的冗长版本:

{{ form.meal.field.choices.1.1 }}
Run Code Online (Sandbox Code Playgroud)

真正的痛苦是我需要得到所选择的选择,而我想到的唯一方法是迭代选择和检查{% ifequals currentChoice.0 choiceField.data %},这甚至更加丑陋.

可以轻松完成吗?或者它需要一些模板标签编程?难道这不应该在django中可用吗?

django django-templates django-forms

122
推荐指数
6
解决办法
6万
查看次数

扩展Scala集合

我想要一个试图覆盖现有密钥值的Map.我试过了:

trait Unoverwriteable[A, B] extends scala.collection.Map[A, B] {
    case class KeyAlreadyExistsException(e: String) extends Exception(e)

    abstract override def + [B1 >: B] (kv: (A, B1)): Unoverwriteable[A, B1] = {
        if (this contains(kv _1)) throw new KeyAlreadyExistsException(
            "key already exists in WritableOnce map: %s".format((kv _1) toString)
        )
        super.+(kv)
    }

    abstract override def get(key: A): Option[B] = super.get(key)
    abstract override def iterator: Iterator[(A, B)] = super.iterator
    abstract override def -(key: A): Unoverwriteable[A, B] = super.-(key)
}
Run Code Online (Sandbox Code Playgroud)

得到了:

<console>:11: error: type mismatch;
 found   : …
Run Code Online (Sandbox Code Playgroud)

generics scala traits extend scala-collections

5
推荐指数
1
解决办法
3086
查看次数

Python:C++ - 就像流输入一样

是否有一种pythonic方式的阅读 - 比如说 - 混合整数和字符输入而不是一次读取整个输入而不用担心换行?例如,我有一个文件,其中包含空格分隔的数据,我只知道有x个整数,然后是y个字符,然后是更多的整数.我不想假设有关换行的任何内容.

我的意思是像C++中的以下内容一样无意识:

...

int i, buf;
char cbuf;
vector<int> X, Z;
vector<int> Y;

for (i = 0; i < x; i++) {
    cin >> buf;
    X.push_back(buf);
}

for (i = 0; i < y; i++) {
    cin >> cbuf;
    Y.push_back(cbuf);
}

for (i = 0; i < z; i++) {
    cin >> buf;
    Z.push_back(buf);
}
Run Code Online (Sandbox Code Playgroud)

编辑:我忘了说我希望它在控制台的实时输入下表现良好 - 即在获取令牌之前不需要按ctrl + d并且该功能应该能够尽快返回它们行已输入.:)

c++ python input stream

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