是否可以在DJango模板中对一组相关项进行排序?
即:此代码(为清晰起见,省略了HTML标记):
{% for event in eventsCollection %}
{{ event.location }}
{% for attendee in event.attendee_set.all %}
{{ attendee.first_name }} {{ attendee.last_name }}
{% endfor %}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
显示几乎完全是我想要的.我唯一想要改变的是我按照姓氏排序的与会者名单.我试过说这样的话:
{% for event in events %}
{{ event.location }}
{% for attendee in event.attendee_set.order_by__last_name %}
{{ attendee.first_name }} {{ attendee.last_name }}
{% endfor %}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
唉,上面的语法不起作用(它产生一个空列表),我也没有想过任何其他变化(报告了很多语法错误,但没有快乐).
当然,我可以在我的视图中生成某种排序的与会者列表,但这是一个丑陋而脆弱的(我提到丑陋)解决方案.
毋庸置疑,但无论如何我会说,我已经仔细阅读了在线文档并搜索了Stack Overflow和django-user的档案而没有发现任何有用的东西(啊,如果只有一个查询集是字典,那么dictsort就会这样做工作,但它不是,它没有)
==============================================
在接受Tawmas的回答后,编辑添加了其他想法.
Tawmas完全像我提出的那样解决了这个问题 - 虽然解决方案不是我所期望的.结果,我学到了一种可用于其他情况的有用技术.
汤姆的回答提出了我在我的OP中已经提到的一种方法,暂时被拒绝为"丑陋".
"丑陋"是一种直觉反应,我想澄清它的错误.在这样做时,我意识到这是一个丑陋的方法的原因是因为我对将查询集传递给要呈现的模板的想法感到困惑.如果我放松了这个要求,那么应该采用一种不起眼的方法.
我还没有尝试过这个,但是假设不是传递查询集,而是通过查询集迭代生成事件列表的视图代码,然后使用针对WAS排序(或过滤的)对应参与者的查询集来装饰每个事件.或者其他什么)以期望的方式.像这样的东西:
eventCollection = []
events = Event.object.[filtered and …
Run Code Online (Sandbox Code Playgroud) 对于我使用过的大多数GUI,当包含文本的控件获得焦点时,将选择控件的全部内容.这意味着如果您刚开始输入,则完全替换以前的内容.
示例:您具有使用零值初始化的旋转控件.您选中它并键入"1"控件中的值现在为1.
使用Swing,这不会发生.未选择控件中的文本,克拉显示在现有文本的一端或另一端.继续上面的例子:
使用Swing JSpinner,当您选择旋转控件时,克拉位于左侧.键入"1",控件中的值现在为10.
这驱使我(和我的用户)爬上墙,我想改变它.更重要的是,我想全局更改它,因此新行为适用于JTextField,JPasswordField,JFormattedTextField,JTextArea,JComboBox,JSpinner等.我发现这样做的唯一方法就是为每个控件添加一个FocusAdapter,并将focusGained()方法覆盖为Do The Thing [tm].
必须有一种更简单,更不易碎的方式.请?
编辑:此特定案例的另一条信息.我正在使用的表单是使用Idea的表单设计器生成的.这意味着我通常不会编写代码来创建组件.有可能告诉Idea你想自己创建它们,但这是我想避免的麻烦.
座右铭:所有优秀的程序员基本都是懒惰的.
在我的源代码中,我一直非常小心地使用Unicode,总是调用WinAPI函数的宽版本,在我的转换中非常小心等等,以支持我的程序的许多用户使用非英文版本的Windows.
但是错误渐渐蔓延,我相信你们都能理解.我最近遇到程序崩溃,在我的代码中只有一个地方,我调用了函数"isspace"而不是"iswspace".
是否有一些工具允许我扫描我的所有ANSI函数调用的源代码,希望找到可能存在的更多错误?
谢谢.
在 Linux 上运行(uname 说:)
Linux 2.6.32-431.29.2.el6.x86_64 #1 SMP Sun Jul 27 15:55:46 EDT 2014 x86_64 x86_64 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)
我的测试表明,时钟 ID 为 CLOCK_MONOTONIC_COARSE 的 clock_gettime 调用比使用时钟 ID CLOCK_MONOTONIC 的调用快一个数量级。
这是一个测试运行的示例输出,它在紧密循环中调用 clock_gettime 一百万次,并以毫秒为单位测量经过的时间:
CLOCK_MONOTONIC lapse 795
CLOCK_MONOTONIC_COARSE lapse 27
Run Code Online (Sandbox Code Playgroud)
这让我很高兴并使分析器的结果看起来更好,但是我希望我可以使用 std::chrono 或 boost::chrono 来实现便携性和标准一致性,而不会牺牲这个速度。不幸的是,我还没有找到任何方法来说服 chrono(任一)在可用时使用 CLOCK_MONOTONIC_COARSE。我尝试了 chrono::steady_clock,但结果与 CLOCK_MONOTONIC 值相当。
有没有办法指定你愿意为了速度而牺牲精度的chrono?
以下Java代码:
public class TestCSVDataToMap {
public static Hashtable<String, Integer> testTable = new Hashtable<>();
public static void main (String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new FileReader("test.csv"));
String line;
while ((line = reader.readLine()) != null) {
String symbol = "0";
if(testTable.contains(symbol)) {
int value = testTable.get(symbol);
value++;
testTable.put(symbol, value);
}
else {
System.out.println("dash!");
testTable.put(symbol, 1);
}
}
System.out.println(testTable);
}
}
Run Code Online (Sandbox Code Playgroud)
有输出:
dash!
dash!
dash!
dash!
{0=1}
Run Code Online (Sandbox Code Playgroud)
为什么在解析.csv文件时密钥'0'的值没有增长?在TestTable的(一个Hashtable),它被初始化为(0,1),并且该值应保持增长,由于符号被作为"0"的一个关键总是检测.
我正按照以下说明测试Android应用:http: //www.jetbrains.com/idea/webhelp/testing-android-applications.html
和这里
http://developer.android.com/guide/topics/testing/index.html
当我运行测试时它会说"实例化测试"一段时间,然后它说"无法将测试报告器连接到测试框架或测试框架意外退出".
模拟器启动正常,但屏幕上没有显示任何内容.
控制台说:
Testing started at 11:41 AM ...
Waiting for device.
C:\Android\tools\emulator.exe -avd GoogleAPI_2_3_3 -netspeed full -netdelay none
Device connected: emulator-5554
Device is online: emulator-5554
Target device: emulator-5554 (GoogleAPI_2_3_3)
Uploading file
local path: C:\Users\<omitted details>.apk
remote path: /data/local/tmp/com.mycompany
Installing com.mycompany
DEVICE SHELL COMMAND: pm install -r "/data/local/tmp/com.mycompany"
pkg: /data/local/tmp/com.mycompany
Success
Running testsTest running startedFinish
Run Code Online (Sandbox Code Playgroud)
Logcat似乎没有任何帮助.特别是它没有显示我在测试中输入的Log.d消息.
有趣的是,有人在Intellij开发者社区论坛上询问了这个问题:
http://devnet.jetbrains.net/message/5363961#5363961
但问题几个月来一直没有得到回答.
有人有任何诊断问题的想法吗?
我尝试使用std库,特别是线程库.我们的想法是在有多线程和无多线程的情况下填充矩阵.我有8个核心.
void fillMatrix(int ID, std::vector<std::vector<double>> & lMatrix,int inThread){
for (int i = 0; i < 10000; ++i){
if (i % inThread == ID){
for (int j = 0; j < 10000; ++j){
lMatrix[i][j] = 123456.0;
}
}
}
}
void testMT(int inThread){
std::vector<std::thread> lPool;
std::vector<std::vector<double>> lMatrix(10000, std::vector<double>(10000));
for (int i = 0; i < inThread; ++i){
lPool.push_back(std::thread(std::bind(&fillMatrix,i, lMatrix,inThread)));
}
for (std::thread & t : lPool){
t.join();
}
}
Run Code Online (Sandbox Code Playgroud)
主要代码:
int main(){
const clock_t begin_time1 = clock();
testMT(1);
std::cout << float(clock() …
Run Code Online (Sandbox Code Playgroud) 我希望以下代码永远打印出文本:
Thread t = new Thread()
{
public void run()
{
for(;;)
{
System.out.print("thread example");
}
}
};
t.start();
Run Code Online (Sandbox Code Playgroud)
但事实并非如此.它只是因为for循环而锁定.有人可以告诉我为什么吗?
当我做一些"c ++ prime"练习时遇到问题,iterator end()有问题.所以我写了一个测试文件,其代码如下:
int main (void)
{
vector<int> v(10);
auto c = v.end();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
令我惊讶的是,c的值不是10,而是一个奇怪的数字.这是我的调试结果:
这个问题的原因是什么?是由于编译器?我使用"g ++ -g -Wall -std = c ++ 14"进行编译.
我有以下代码作为文件夹锁进行刺激:
#include<iostream>
#include<conio.h>
#include<windows.h>
#include<string>
#include<fstream>
#include<process.h>
#define max 100
using namespace std;
struct folder_all{
std::string name;
std::string location;
};
int main(){
folder_all folder[max];
int n;
cout<<"\n\n\t\t\tFolder Locker"<<endl;
if (std::ifstream("data"))
{
cout<<"\n\n\tYour Folders are safe with us"<<endl;
cout<<"Enter your password to unlock(Password will not be visible): ";
HANDLE inHandle = GetStdHandle(STD_INPUT_HANDLE);
DWORD mode;
GetConsoleMode(inHandle, &mode);
SetConsoleMode(inHandle, mode & ~ENABLE_ECHO_INPUT);
std::string inpass;
cin>>inpass;
SetConsoleMode(inHandle, mode);
}
else{
cout<<"\nNo. of folders to be locked: ";
cin>>n;
HANDLE inHandle = GetStdHandle(STD_INPUT_HANDLE);
DWORD mode; …
Run Code Online (Sandbox Code Playgroud)