Ошибка в django при использовании Apache & mod_wsgi - PullRequest
2 голосов
/ 14 марта 2010

Эй, я вносил некоторые изменения в мою среду разработки django, как предлагали некоторые из вас.До сих пор мне удалось настроить и успешно запустить его с помощью postgres.

Теперь я пытаюсь запустить приложение, используя apache2 и mod_wsgi, но столкнулся с этой небольшой проблемой после того, как следовал указаниям django.docs.

Когда я получаю доступ к localhost / myapp / tasks, возникает эта ошибка:

    Request Method:   GET
Request URL:  http://localhost/myapp/tasks/
Exception Type:  TemplateSyntaxError
Exception Value:  

Caught an exception while rendering: argument 1 must be a string or unicode object

Original Traceback (most recent call last):
  File "/usr/local/lib/python2.6/dist-packages/django/template/debug.py", line 71, in render_node
    result = node.render(context)
  File "/usr/local/lib/python2.6/dist-packages/django/template/defaulttags.py", line 126, in render
    len_values = len(values)
  File "/usr/local/lib/python2.6/dist-packages/django/db/models/query.py", line 81, in __len__
    self._result_cache = list(self.iterator())
  File "/usr/local/lib/python2.6/dist-packages/django/db/models/query.py", line 238, in iterator
    for row in self.query.results_iter():
  File "/usr/local/lib/python2.6/dist-packages/django/db/models/sql/query.py", line 287, in results_iter
    for rows in self.execute_sql(MULTI):
  File "/usr/local/lib/python2.6/dist-packages/django/db/models/sql/query.py", line 2369, in execute_sql
    cursor.execute(sql, params)
  File "/usr/local/lib/python2.6/dist-packages/django/db/backends/util.py", line 19, in execute
    return self.cursor.execute(sql, params)
TypeError: argument 1 must be a string or unicode object
... ... ...

И затем он выделяет тег шаблона {% for t in tasks%}, как источникпроблема есть, но она работала нормально на встроенном сервере.

Представление, связанное с этой страницей, действительно просто, просто извлеките все объекты Task.И шаблон просто отображает их в таблице.

Кроме того, некоторые страницы отображаются нормально.Я не хочу заполнять этот Вопрос кодом, поэтому, если вам понадобится дополнительная информация, я буду рад предоставить ее.Спасибо

РЕДАКТИРОВАТЬ

Итак, вот мой взгляд:

@login_required
def tasks(request, msg=''):
    tasks = Task.objects.all()
    message = msg
    return custom_render('user/tasks.html',
                         {'tasks': tasks, 'message':message},
                         request)

А вот мой шаблон:

{% block main_content %}

{% if message %}
    <p id="message" class="info">
        {{message}}
    </p>
{% endif %}

<a href="{% url GProject.myapp.views.new_task %}">Nueva Tarea</a>

    <table  id="tasks-table" >
        <thead>
            <tr>
                <th colspan="4" >{{tasks|length}} tareas pendientes</th>
            </tr>
            <tr>
                <th>#</th>
                <th>Proyecto</th>
                <th>Título</th>
                <th>Estado</th>
            </tr>
        </thead>
        <tbody>
            {% for t in tasks %}
                <tr id="row-{{t.id}}" class="{% cycle 'row-0' 'row-1' %} priority-{{ t.priority }}">
                    <td width="25">
                       <a href="{% url GProject.myapp.views.view_task t.id %}">{{t.id}}</a>
                   </td>
                   <td>
                       <a href="{% url GProject.myapp.views.view_task t.id %}">{{t.project}}</a>
                   </td>
                   <td width="400">
                       <a href="{% url GProject.myapp.views.view_task t.id %}">
                           {{t.title}}
                       </a>
                   </td>
                   <td>{{t.get_status_display}}</td>
                </tr>
            {% empty %}
                <tr><td>No tasks</td></tr>
            {% endfor %}

        </tbody>
    </table>
{% endblock main_content %}

Также теперь я получаю эту ошибку:

TypeError at /admin/tareas/

argument 1 must be a string or unicode object

Request Method:  GET
Request URL:  http://localhost/gpro/admin/tareas/
Exception Type:  TypeError
Exception Value:  

argument 1 must be a string or unicode object

Exception Location:  /usr/local/lib/python2.6/dist-packages/django/db/backends/postgresql_psycopg2/base.py in _cursor, line 105
Python Executable:  /usr/bin/python
Python Version:  2.5.4

РЕДАКТИРОВАТЬ

Задачи модели выглядят так:

class Task(models.Model):

    project = models.ForeignKey(Project)
    title = models.CharField(max_length=128)
    description = models.TextField(max_length=1500)
    effort = models.IntegerField(null=True, blank=True)
    priority = models.IntegerField(max_length=1, null=True, blank=True, choices=PRIORITY_VALUES)
    severity = models.IntegerField(max_length=1, null=True, blank=True, choices=SEVERITY_VALUES)
    asignee = models.ForeignKey(User, blank=True, null=True, related_name='asignee')
    milestone = models.ForeignKey(Milestone, blank=True, null=True)
    created_by = models.ForeignKey(User, blank=True, null=True, related_name='created_by')
    status = models.IntegerField(max_length=1, choices=STATUS_VALUES, default=1)
    resolution_comment = models.CharField(max_length=1500, null=True, blank=True) #comentario al resolver la task
    due_date = models.DateField(blank=True, null=True)
    created_on = models.DateTimeField(auto_now_add = True)

    #print    
    def __unicode__(self):
        return self.title

custom_render:

def custom_render(template_name, data_dict, request):
    return render_to_response(template_name,
                              data_dict,
                              context_instance=RequestContext(request))

1 Ответ

0 голосов
/ 27 марта 2010

Просто учитывая, что вы не столкнулись с проблемой при запуске runserver manage.py, и вы столкнулись с проблемой при использовании mod_wsgi, я посмотрю на разрешения базы данных.

Во-первых, вы запускаете mod_wsgi от имени того же пользователя, что и Python manage.py runserver? Если нет, вам нужно предоставить права доступа mod_wsgi. Например, попробуйте что-то вроде этого, где apache - это имя пользователя, выполняющего mod_wsgi:

sudo su - postgres
createuser -S -D -R apache
psql
< should now be in the psql shell >
grant all on database < your database name > to apache;
...