2015-10-13 6 views
1

Я столкнулся с проблемой при создании небольшого веб-приложения для своих одноклассников. Возникает проблема с получением переменных URL-адреса и передачей тем, чтобы отображать шаблоны. Может ли кто-нибудь помочь?Django: Ошибка NoReverseMatch

Обратное прослеживание:

NoReverseMatch at /board/본과1학년/미생물/ 
Reverse for 'get_q_table' with arguments '('', '미생물')' and keyword arguments '{}' not found. 1 pattern(s) tried: ['board/(?P<board_grade>\\w+)/(?P<article_subject>\\w+)/q_table/$'] 
Request Method: GET 
Request URL: http://192.168.56.101:8000/board/%EB%B3%B8%EA%B3%BC1%ED%95%99%EB%85%84/%EB%AF%B8%EC%83%9D%EB%AC%BC/ 
Django Version: 1.7.6 
Exception Type: NoReverseMatch 
Exception Value:  
Reverse for 'get_q_table' with arguments '('', '미생물')' and keyword arguments '{}' not found. 1 pattern(s) tried: ['board/(?P<board_grade>\\w+)/(?P<article_subject>\\w+)/q_table/$'] 
Exception Location: /home/web/venv/lib/python3.4/site-packages/django/core/urlresolvers.py in _reverse_with_prefix, line 468 
Python Executable: /home/web/venv/bin/python 

Urls.py (проблема достижения последнего URL):

urlpatterns = patterns('', 
    url(r'^admin/', include(admin.site.urls)), 
    url(r'^index/$', 'exam.views.index', name = 'index'), 
    url(r'^board/(?P<board_grade>\w+)/$', 'exam.views.read_board', name = 'board'), 
    url(r'^board/(?P<board_grade>\w+)/(?P<article_subject>\w+)/$', 'exam.views.read_article', name = 'read_article'), 
    url(r'^board/(?P<board_grade>\w+)/(?P<article_subject>\w+)/q_table/$', 'exam.views.get_q_table', name='get_q_table'), 

) 

Ошибка шаблона рендеринга:

In template /home/web/workspace/board/exam/templates/article.html, error at line 26 
Reverse for 'get_q_table' with arguments '('', '미생물')' and keyword arguments '{}' not found. 1 pattern(s) tried: ['board/(?P<board_grade>\\w+)/(?P<article_subject>\\w+)/q_table/$'] 

26     <form action="{% url 'get_q_table' board.grade article.subject %}" method="POST"> 
27      {% csrf_token %} 
28      <div class="form-group"> 
29       <label for="professor">출제교수:</label> 

Модели:

class Board(models.Model): 
    user = models.ForeignKey(User) 
    grade = models.CharField("학년", max_length=10) 
    created_date = models.DateTimeField("생성일", auto_now_add=True) 

    def __str__(self): 
     return "%s" % (self.grade,) 

class Article(models.Model): 
    board = models.ForeignKey(Board) 
    subject = models.CharField("과목명", max_length=10) 
    year = models.PositiveIntegerField("연도", validators=[MinValueValidator(1990), MaxValueValidator(2100)]) 
    semester = models.PositiveIntegerField("학기", validators=[MinValueValidator(1), MaxValueValidator(2)]) 
    quarter = models.IntegerField("쿼터", validators=[MinValueValidator(1), MaxValueValidator(3)]) 
    written_date = models.DateTimeField("작성일", auto_now_add=True) 
    updated_date = models.DateTimeField("수정일", auto_now=True) 
    #prof_list 

    def __str__(self): 
     return "%s년 %d학기 %d쿼터: %s" % (self.year, self.semester, self.quarter, self.subject) 

Views.py:

def get_q_table(request, board_grade, article_subject): 
    article = get_object_or_404(Article, subject=article_subject) 

    context = { 
     "questions" : Question.objects.all().order_by("number"), 
     "article" : article, 
    } 
    return render(request, "q_table.html", context) 
+3

Возможный дубликат [как иметь символы Юникода в URL-адресе django?] (Http://stackoverflow.com/questions/20514455/how-to-have-unicode-characters-in-django-url) – ojii

ответ

0

Первый взгляд аргумент {% url 'get_q_table' board.grade article.subject %} не существует, так как вы не передаете в board к контексту. Он разрешен к пустой строке, которая не соответствует регулярному выражению (?P<board_grade>\w+).

Вместо этого вам необходимо использовать article.board.grade, или вам нужно передать переменную board в контекст.

+0

жаль, что я не знаю «Непременно следуй за тобой. Что вы подразумеваете под «первым аргументом»? Как я НЕ должен быть пустым? – Bossam

+0

@Bossam Первый аргумент представления в тэге {% url%}. Я обновил свой ответ, он пуст, потому что 'board.grade' не существует в контексте вашего шаблона. – knbk

+0

Я решил проблему. Он работал после добавления атрибута primary_key = True в поле класса «класс». Я полагаю, что переменные, извлеченные из urls.py, должны быть правильно установлены как primary_key? Вы случайно знаете, почему? – Bossam

Смежные вопросы