2016-07-09 6 views
0

Я создал post_create и post_detail для моей модели сообщений. Используя Django. Я хотел создать slug для нового сообщения, чтобы после нажатия какой-либо записи в моем post_list он мог перенаправить post_detail с созданием уникального пула. Когда я запускаю свой сервер, он поднимает: Reverse для 'detail' с аргументами '()' и ключевыми аргументами '{' slug ':' '}' не найден. 1 образец (ы): ['deal/(? P \ d +)/$']. Если у кого есть какие-либо указания на то, что может вызвать эту ошибку, я бы это оценил.

views.py:

def deal(request): 
    today = timezone.now().date() 
    queryset_list = Post.objects.active() #.order_by("-timestamp") 

    if request.user.is_staff or request.user.is_superuser: 
     queryset_list = Post.objects.all() 

    query = request.GET.get("q") 

    if query: 
     queryset_list = queryset_list.filter(
       Q(from1__icontains=query)| 
       Q(type_of_truck__icontains=query)| 
       Q(Material_Name__icontains=query) | 
       Q(To__icontains=query)| 
       Q(Material_Type__icontains=query) 
       ).distinct() 

    paginator = Paginator(queryset_list, 2) # Show 25 contacts per page 
    page_request_var = "page" 
    page = request.GET.get(page_request_var) 

    try: 
     queryset = paginator.page(page) 
    except PageNotAnInteger: 
     # If page is not an integer, deliver first page. 
     queryset = paginator.page(1) 
    except EmptyPage: 
     # If page is out of range (e.g. 9999), deliver last page of results. 
     queryset = paginator.page(paginator.num_pages) 


    context = { 
     "object_list": queryset_list, 
     "from1": "List", 
     "page_request_var": page_request_var, 
     "today": today, 
    } 

    return render(request, 'before_login/deal.html', context) 

def post_create(request): 
    # if not request.user.is_staff or not request.user.is_superuser: 
    # raise Http404 

    form = PostForm(request.POST or None) 

    if form.is_valid(): 
     instance = form.save(commit=False) 
     print(form.cleaned_data.get("from1")) 
     instance.user = request.user 
     instance.save() 
     # message success 
     messages.success(request, "Successfully Created") 
     return HttpResponseRedirect(instance.get_absolute_url()) 

    context = { 
     "form": form, 
    } 
    return render(request, "loggedin_load/post_load.html", context) 

def post_detail(request, slug=None): #retrieve 
    #instance = Post.objects.get(id=1) 
    instance = get_object_or_404(Post, slug=slug) 

    if instance.date > timezone.now().date(): 
     if not request.user.is_staff or not request.user.is_superuser: 
      raise Http404 
    share_string = quote_plus(instance.Material_Type) 

    context = { 
     "from1": instance.from1, 
     "instance": instance, 
     "share_string": share_string 
    } 
    return render(request, "loggedin_load/post_detail.html", context) 

urls.py:

url(r'^deal/$', views.deal, name='deal'), 
url(r'^deal/(?P<slug>[\w-]+)/$', views.post_detail, name='detail'), 

models.py:

class Post(models.Model): 

    user = models.ForeignKey(settings.AUTH_USER_MODEL, default=1) 
    from1 = models.CharField(max_length=20) 
    type_of_truck = models.CharField(max_length=20) 
    date = models.CharField(max_length=20) 
    slug = models.SlugField(unique=True) 
    weight = models.DecimalField(max_digits=5, decimal_places=2) 
    Material_Name = models.CharField(max_length=20) 
    To = models.CharField(max_length=20) 
    Number_Of_Truck = models.CharField(max_length=20) 
    Time = models.CharField(max_length=20) 
    Volume = models.CharField(max_length=20) 
    Material_Type = models.CharField(max_length=20) 
    #updated = models.DateTimeField(auto_now=True, auto_now_add=False) 
    timestamp = models.DateTimeField(auto_now=False, auto_now_add=True) 

    objects = PostManager() 

    def __unicode__(self): 
     return self.from1 

    def __str__(self): 
     return self.from1 

    def get_absolute_url(self): 
     return reverse("posts:detail", kwargs={"slug": self.slug}) 

    class Meta: 
     ordering = ["-timestamp", "-Time"] 



def create_slug(instance, new_slug=None): 
    slug = slugify(instance.id) 

    if new_slug is not None: 
     slug = new_slug 

    qs = Post.objects.filter(slug=slug).order_by("-id") 
    exists = qs.exists() 

    if exists: 
     new_slug = "%s-%s" %(slug, qs.first().id) 
     return create_slug(instance, new_slug=new_slug) 
    return slug 


def pre_save_post_receiver(sender, instance, *args, **kwargs): 
    if not instance.slug: 
     instance.slug = create_slug(instance) 



    pre_save.connect(pre_save_post_receiver, sender=Post) 

deal.html:

{% for obj in object_list %} 


    <td scope="row">{{obj.date}}</td> 
    <td> <a href='{{ obj.get_absolute_url }}'>{{ obj.from1 }}</a><br/></td> 
    <td>{{obj.To}}</td> 
    <td>{{obj.Material_Type}}</td> 
    <td>{{obj.type_of_truck}}</td> 
    <td>{{obj.Number_Of_Truck}}</td> 
    <td>{{obj.weight}}</td> 
    <td>Rs. 55000</td> 
    <td><button type="button" id="bidbutton" class="btn btn-secondary fontsize align-centre bidbutton">Bid</button></td> 
</tr> 
{% endfor %} 

post_detail.html:

{% load urlify %} 

{% block head_title %} 
{{ instance.from1 }} | {{ block.super }} 
{% endblock head_title %} 



{% block content %} 
<div class='col-sm-6 col-sm-offset-3'> 

<!-- <h1>{{ title }} <small>{% if instance.draft %}<span style='color:red;'>Draft</span>{% endif %} -->{{ instance.from1 }}</small></h1> 
{% if instance.from1 %} 
<p>{{ instance.Material_Type }}</p> 
{% endif %} 

отслеживающий:

Environment: 


Request Method: GET 
Request URL: http://127.0.0.1:8000/deal/ 

Django Version: 1.9.7 
Python Version: 3.4.4 
Installed Applications: 
['personal', 
'custom_user', 
'django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'crispy_forms', 
'widget_tweaks'] 
Installed Middleware: 
['django.middleware.security.SecurityMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.common.CommonMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'django.middleware.clickjacking.XFrameOptionsMiddleware'] 


Template error: 
In template C:\Users\sumanth\Desktop\django-custom-user- master\Project\mysite\personal\templates\before_login\deal.html, error at line 78 
Reverse for 'detail' with arguments '()' and keyword arguments '{'slug': ''}' not found. 1 pattern(s) tried: ['deal/(?P<slug>[\\w-]+)/$'] 68 :  <th>Best Offer</th> 
69 :  <th></th> 
70 :  </tr> 
71 : </thead> 
72 : <tbody> 
73 : <tr> 
74 : {% for obj in object_list %} 
75 : 
76 : 
77 :  <td scope="row">{{obj.date}}</td> 
78 :  <td> <a href=' {{ obj.get_absolute_url }} '>{{ obj.from1 }}</a><br/></td> 
79 :  <td>{{obj.To}}</td> 
80 :  <td>{{obj.Material_Type}}</td> 
81 :  <td>{{obj.type_of_truck}}</td> 
82 :  <td>{{obj.Number_Of_Truck}}</td> 
83 :  <td>{{obj.weight}}</td> 
84 :  <td>Rs. 55000</td> 
85 :  <td><button type="button" id="bidbutton" class="btn btn-secondary fontsize align-centre bidbutton">Bid</button></td> 
86 :  </tr> 
87 : {% endfor %} 
88 :  <!--<tr> 

Traceback:

File "c:\python34\lib\site-packages\django\core\handlers\base.py" in get_response 
149.      response = self.process_exception_by_middleware(e, request) 

File "c:\python34\lib\site-packages\django\core\handlers\base.py" in get_response 
147.      response = wrapped_callback(request, *callback_args, **callback_kwargs) 

File "C:\Users\sumanth\Desktop\django-custom-user-master\Project\mysite\personal\views.py" in deal 
70.  return render(request, 'before_login/deal.html', context) 

File "c:\python34\lib\site-packages\django\shortcuts.py" in render 
67.    template_name, context, request=request, using=using) 

File "c:\python34\lib\site-packages\django\template\loader.py" in render_to_string 
97.   return template.render(context, request) 

File "c:\python34\lib\site-packages\django\template\backends\django.py" in render 
95.    return self.template.render(context) 

File "c:\python34\lib\site-packages\django\template\base.py" in render 
206.      return self._render(context) 

File "c:\python34\lib\site-packages\django\template\base.py" in _render 
197.   return self.nodelist.render(context) 

File "c:\python34\lib\site-packages\django\template\base.py" in render 
992.     bit = node.render_annotated(context) 

File "c:\python34\lib\site-packages\django\template\base.py" in render_annotated 
959.    return self.render(context) 

File "c:\python34\lib\site-packages\django\template\loader_tags.py" in render 
173.   return compiled_parent._render(context) 

File "c:\python34\lib\site-packages\django\template\base.py" in _render 
197.   return self.nodelist.render(context) 

File "c:\python34\lib\site-packages\django\template\base.py" in render 
992.     bit = node.render_annotated(context) 

File "c:\python34\lib\site-packages\django\template\base.py" in render_annotated 
959.    return self.render(context) 

File "c:\python34\lib\site-packages\django\template\loader_tags.py" in render 
69.     result = block.nodelist.render(context) 

File "c:\python34\lib\site-packages\django\template\base.py" in render 
992.     bit = node.render_annotated(context) 

File "c:\python34\lib\site-packages\django\template\base.py" in render_annotated 
959.    return self.render(context) 

File "c:\python34\lib\site-packages\django\template\defaulttags.py" in render 
220.      nodelist.append(node.render_annotated(context)) 

File "c:\python34\lib\site-packages\django\template\base.py" in render_annotated 
959.    return self.render(context) 

File "c:\python34\lib\site-packages\django\template\base.py" in render 
1043.    output = self.filter_expression.resolve(context) 

File "c:\python34\lib\site-packages\django\template\base.py" in resolve 
709.     obj = self.var.resolve(context) 

File "c:\python34\lib\site-packages\django\template\base.py" in resolve 
850.    value = self._resolve_lookup(context) 

File "c:\python34\lib\site-packages\django\template\base.py" in _resolve_lookup 
913.        current = current() 

File "C:\Users\sumanth\Desktop\django-custom-user-master\Project\mysite\personal\models.py" in get_absolute_url 
47.   return reverse("posts:detail", kwargs={"slug": self.slug}) 

File "c:\python34\lib\site-packages\django\core\urlresolvers.py" in reverse 
600.  return force_text(iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs))) 

File "c:\python34\lib\site-packages\django\core\urlresolvers.py" in _reverse_with_prefix 
508.        (lookup_view_s, args, kwargs, len(patterns), patterns)) 

Exception Type: NoReverseMatch at /deal/ 
Exception Value: Reverse for 'detail' with arguments '()' and keyword arguments '{'slug': ''}' not found. 1 pattern(s) tried: ['deal/(?P<slug>[\\w-]+)/$'] 
+1

, что делает ваш шаблон выглядеть? – rwx

ответ

2

Пожалуйста, другой взгляд на ошибку:

Reverse for 'detail' with arguments '()' and keyword arguments '{'slug': >''}' not found. 1 pattern(s) tried: ['deal/(?P\d+)/$'].

Признаете ли вы URL 'deal/(?P\d+)/$'?

Кажется, что этот URL-адрес также имеет имя 'detail' и определен в вашем до адреса post_detail. Убедитесь, что имена, которые вы указываете на свои URL, уникальны.

Я предполагаю, что любой код, который вы включили в вопрос, находится в вашем приложении posts.

Редактировать

Это изменение сделано после того, как вопрос был обновлен с реальными данными и отладочные сообщения.

Проблема заключается в том, что не все записи в вашей модели Posts имеют номер slug. Следовательно, kwarg slug пуст, что приводит к сбою reverse. Вы можете определить метод создания уникального пула на основе какого-либо другого поля на вашей модели Posts каждый раз, когда вызывается метод модели create. (Вам также необходимо переопределить PostsManager.

Вы можете также использовать pk вместо slug для поиска ваших Posts экземпляров. pk доступен по умолчанию на всех моделях Django.

+0

Собственно, это не post_list & post_detail в моем проекте. Чтобы лучше понять этот поток, я изменил его на post_detail, а не на сделку. Теперь я изменяю фактическую ошибку в вопросе. Пожалуйста, взгляните на это и помогите мне решить эту ошибку. – vanam

+0

изменил эту ошибку? Как это работает? Пожалуйста, разместите фактический код и ошибку. Кроме того, ваше описание вопроса по-прежнему имеет фактическую ошибку (как и должно быть). –

+0

Я разместил фактический код и ошибку. Взгляните на нее. – vanam

0

Я не уверен, что если и нужно чтобы указать posts:detail, этого должно быть достаточно в модели. Ваши URL-адреса называются detail, поэтому попробуйте просто detail.

models.py

def get_absolute_url(self): 
    return reverse("detail", kwargs={"slug": self.slug})