john taylor
john taylor

Reputation: 1100

NameError at /the/Url Path 1/ name 'variable' is not defined

I am trying to get the urls for the post detail views to display but instead it has a error.

I tried searching but the results involved reformatting switching the operator from = to == which wasn't correct.

its throwing an exception the full traceback I included at bottom

I am using Django 3 the code had worked in Django 2 before. I have been able to get code to work with a few minor changes here and there up till this error.

Note: the category and subcategory apps are not added yet so just a simple default value as a placeholder value is being used. I was able to this the 1st with no issues.

exc     

NameError("name 'newsname' is not defined")

get_response    

<bound method BaseHandler._get_response of <django.core.handlers.wsgi.WSGIHandler object at 0x0446CFE8>>

request     

<WSGIRequest: POST '/panel/news/add/'>

Using django 3

image of the error

In visual code on the views.py I see a pylint error

Undefined variable 'newsname' which is

catname=newsname, 

which is

catid=newsid,

In this part of the code

        b = News(name=newstitle, short_txt=newstxtshort, body_txt=newstxt, date=2019, pic="-", writer="-", catname=newsname, catid=newsid, show=0)

From this

def news_add(request):

if request.method == 'POST':

    newstitle = request.POST.get('newstitle')
    newscat = request.POST.get('newscat')
    newstxtshort = request.POST.get('newstxtshort')
    newstxt = request.POST.get('newstxt')

    if newstitle == "" or newstxtshort == "" or newstxt == "" or newscat == "" :

        error = "All Fields Required"
        return render(request, 'back/error.html', {'error':error})

    b = News(name=newstitle, short_txt=newstxtshort, body_txt=newstxt, date=2019, pic="-", writer="-", catname=newsname, catid=newsid, show=0)
    b.save()
    return redirect('news_list')

return render(request, 'back/news_add.html')

panel

news/views.py Full


from django.shortcuts import render, get_list_or_404, redirect
from main.models import Main
from .models import News


def news_detail(request,word):

    site = Main.objects.get(pk=1)
    news = News.objects.filter(name=word)

    return render(request, 'front/news_detail.html', {'site':site, 'news':news})

def news_list(request):

    news = News.objects.all()

    return render(request, 'back/news_list.html', {'news':news})

def news_add(request):

    if request.method == 'POST':

        newstitle = request.POST.get('newstitle')
        newscat = request.POST.get('newscat')
        newstxtshort = request.POST.get('newstxtshort')
        newstxt = request.POST.get('newstxt')

        if newstitle == "" or newstxtshort == "" or newstxt == "" or newscat == "" :

            error = "All Fields Required"
            return render(request, 'back/error.html', {'error':error})

        b = News(name=newstitle, short_txt=newstxtshort, body_txt=newstxt, date=2019, pic="-", writer="-", catname=newsname, catid=newsid, show=0)
        b.save()
        return redirect('news_list')

    return render(request, 'back/news_add.html')

news/urls.py

from django.conf.urls import url
from . import views

urlpatterns = [

   url(r'^news/(?P<word>.*)/$', views.news_detail, name='news_detail'),
   url(r'^panel/news/list/$', views.news_list, name='news_list'),
   url(r'^panel/news/add/$', views.news_add, name='news_add'),

]

news/models.py

from __future__ import unicode_literals
from django.db import models


class News(models.Model):

   name = models.CharField(max_length=50)
   short_txt = models.TextField(max_length=30, default='-')
   body_txt = models.TextField(max_length=30, default='-')
   date = models.TextField(max_length=12, default='-')
   pic = models.TextField(max_length=30, default='-')
   writer = models.TextField(max_length=50, default='-')
   catname = models.CharField(max_length=50, default='-')
   catid = models.IntegerField(default='0')
   show = models.IntegerField(default='0')


   def __str__(self):
       return self.name

Full Traceback

Environment:


Request Method: POST
Request URL: http://127.0.0.1:8000/panel/news/add/

Django Version: 3.0.6
Python Version: 3.8.2
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'main',
 'news']
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.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']



Traceback (most recent call last):
  File "C:\Users\taylo\django\mpv\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
    response = get_response(request)
  File "C:\Users\taylo\django\mpv\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\Users\taylo\django\mpv\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\taylo\django\mpv\myproject\news\views.py", line 33, in news_add
    b = News(name=newstitle, short_txt=newstxtshort, body_txt=newstxt, date=2019, pic="-", writer="-", catname=newsname, catid=newsid, show=0)

Exception Type: NameError at /panel/news/add/
Exception Value: name 'newsname' is not defined

Upvotes: 1

Views: 653

Answers (1)

Hisham___Pak
Hisham___Pak

Reputation: 1490

You do not define newsname variable anywhere in news_add function or view.

b = News(name=newstitle, short_txt=newstxtshort, body_txt=newstxt, date=2019, pic="-", writer="-", catname=newsname, catid=newsid, show=0)

Solution is to change this line to,

b = News(name=newstitle, short_txt=newstxtshort, body_txt=newstxt, date=2019, pic="-", writer="-", catname=newscat, catid=newsid, show=0)

Upvotes: 2

Related Questions