以下代码一直有效,直到今天我从Windows机器导入并出现此错误:
在未引用字段中看到的换行符 - 您是否需要以通用换行模式打开文件?
import csv
class CSV:
def __init__(self, file=None):
self.file = file
def read_file(self):
data = []
file_read = csv.reader(self.file)
for row in file_read:
data.append(row)
return data
def get_row_count(self):
return len(self.read_file())
def get_column_count(self):
new_data = self.read_file()
return len(new_data[0])
def get_data(self, rows=1):
data = self.read_file()
return data[:rows]
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
def upload_configurator(request, id=None):
"""
A view that allows the user to configurator the uploaded CSV.
"""
upload = Upload.objects.get(id=id)
csvobject = CSV(upload.filepath)
upload.num_records = csvobject.get_row_count()
upload.num_columns = csvobject.get_column_count()
upload.save()
form = …
Run Code Online (Sandbox Code Playgroud) 我正在使用python(Django Framework)来读取CSV文件.如您所见,我只从这个CSV中拉出2行.我一直想做的是在变量中存储CSV的总行数.
如何获得总行数?
file = object.myfilePath
fileObject = csv.reader(file)
for i in range(2):
data.append(fileObject.next())
Run Code Online (Sandbox Code Playgroud)
我试过了:
len(fileObject)
fileObject.length
Run Code Online (Sandbox Code Playgroud) 我想更改表单在点击时提交的网址,如下所示.以下是我的尝试,但它不起作用.
<form action="" method="post" class="form-horizontal" id="contactsForm" enctype="multipart/form-data">
<div class="widget-content">
<div class="btn-group">
<button data-toggle="dropdown" class="btn dropdown-toggle">
<span class="icon-folder-open icon-large"></span>
Move To <span class="caret"></span>
</button>
<ul class="dropdown-menu">
{% for x,y in actionsForm.fields.move_to.choices %}
<li><a class="move_to" id="{{ x }}" href="#">{{ y }}</a></li>
{% endfor %}
<script>
$(document).ready(function() {
$(".move_to").on("click", function () {
$('#contactsFrom').attr('action', "/test1");
$("#contactsFrom").submit();
e.preventDefault();
});
});
</script>
Run Code Online (Sandbox Code Playgroud) 假设我想创建一个基于类的视图,它既可以更新也可以创建一个对象.根据我之前提出的问题,我可以做以下事情之一:
1)使用2周通用的观点CreateView
和UpdateView
我认为将意味着有两个网址指向两个不同的类.
2)使用继承base的基于类的视图View
,我认为这意味着有两个URL指向只有1个类(我创建了哪个继承View
).
我有两个问题:
a)哪个更好?
b)ccbv.co.uk显示了一个基础View
,但我没有看到记录的任何get,post等方法,这是正确的吗?
我试图理解Django中的bulk_create
这是我想要转换的原始查询:
for e in q:
msg = Message.objects.create(
recipient_number=e.mobile,
content=batch.content,
sender=e.contact_owner,
billee=batch.user,
sender_name=batch.sender_name
)
Run Code Online (Sandbox Code Playgroud)
这是否意味着执行以下操作(下面)将循环并首先创建所有条目然后命中数据库?这是正确的吗?
msg = Message.objects.bulk_create({
Message (
recipient_number=e.mobile,
content=batch.content,
sender=e.contact_owner,
billee=batch.user,
sender_name=batch.sender_name
),
})
Run Code Online (Sandbox Code Playgroud) 在Django中,我想使用一个简单的模板标签来截断数据.
这是我到目前为止:
@register.filter(name='truncate_simple')
def truncate_char_to_space(value, arg):
"""
Truncates a string after a given length.
"""
data = str(value)
if len(value) < arg:
return data
if data.find(' ', arg, arg+5) == -1:
return data[:arg] + '...'
else:
return data[:arg] + data[arg:data.find(' ', arg)] + '...'
Run Code Online (Sandbox Code Playgroud)
但是当我使用它时,我收到以下错误:
{{ item.content|truncate_simple:5 }}
Run Code Online (Sandbox Code Playgroud)
错误:
'ascii'编解码器无法对位置84中的字符u'\ u2013'进行编码:序数不在范围内(128)
错误在线启动 data = str(value)
为什么?
我想我需要创建一个"多对多的通用关系".
我有两种类型的参与者:
class MemberParticipant(AbstractParticipant):
class Meta:
app_label = 'participants'
class FriendParticipant(AbstractParticipant):
"""
Abstract participant common information shared for all rewards.
"""
pass
Run Code Online (Sandbox Code Playgroud)
这些参与者可以获得2种不同类型的1种或多种奖励(奖励模式来自另一个应用程序):
class SingleVoucherReward(AbstractReward):
"""
Single-use coupons are coupon codes that can only be used once
"""
pass
class MultiVoucherReward(AbstractReward):
"""
A multi-use coupon code is a coupon code that can be used unlimited times.
"""
Run Code Online (Sandbox Code Playgroud)
所以现在我需要将这些全部联系起来.这就是我想要创建关系(见下文)的方法,你看到的任何问题?
建议的链接模型如下:
class ParticipantReward(models.Model):
participant_content_type = models.ForeignKey(ContentType, editable=False,
related_name='%(app_label)s_%(class)s_as_participant',
)
participant_object_id = models.PositiveIntegerField()
participant = generic.GenericForeignKey('participant_content_type', 'participant_object_id')
reward_content_type = models.ForeignKey(ContentType, editable=False,
related_name='%(app_label)s_%(class)s_as_reward',
) …
Run Code Online (Sandbox Code Playgroud) 我对Django的测试完全不熟悉.我已经开始安装鼻子和硒,现在我想测试下面的代码(下面)它发送一条短信.
这是实际的代码:
views.py
@login_required
def process_all(request):
"""
I process the sending for a single or bulk message(s) to a group or single contact.
:param request:
"""
#If we had a POST then get the request post values.
if request.method == 'POST':
batches = Batch.objects.for_user_pending(request.user)
for batch in batches:
ProcessRequests.delay(batch)
batch.complete_update()
return HttpResponseRedirect('/reports/messages/')
Run Code Online (Sandbox Code Playgroud)
那么我从哪里开始呢?这就是我到目前为止所做的......
1)创建了一个名为tests的文件夹并添加了init .py.
2)创建了一个名为test_views.py的新python文件(我假设这是正确的).
现在,我该如何编写此测试?
有人能给我看一个如何为上面的视图编写测试的例子吗?
谢谢 :)
我已经编写了一个示例测试,我试图在不创建新数据库的情况下运行它.
我第一次运行测试时一切正常(由于构建数据库需要一段时间):
> REUSE_DB=1 python manage.py test contacts
Ran 1 test in 0.251s
Run Code Online (Sandbox Code Playgroud)
我第二次收到以下错误:
> REUSE_DB=1 python manage.py test contacts
nosetests --verbosity 1 contacts
AttributeError: 'DatabaseCreation' object has no attribute '_rollback_works'
Run Code Online (Sandbox Code Playgroud)
为什么以及如何解决?谢谢.
我的测试:
class ExampleTestCase(TestCase):
def test_contact_page(self):
resp = self.client.get('/contact/single/')
self.assertEqual(resp.status_code, 200)
Run Code Online (Sandbox Code Playgroud)
Settings.py
DEBUG = True
TEMPLATE_DEBUG = DEBUG
INSTALLED_APPS += (
'django_nose',
)
TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'
Run Code Online (Sandbox Code Playgroud) 我收到以下错误,
模板'对象不可迭代
def get_AJAX(request, id):
data = serializers.serialize("json", Template.objects.get(pk=id))
return HttpResponse(data)
Run Code Online (Sandbox Code Playgroud)
但是,我正在使用,'get'
所以我不明白为什么我会收到此错误.有任何想法吗?
django ×8
python ×5
csv ×2
count ×1
django-views ×1
jquery ×1
nose ×1
testing ×1
unit-testing ×1