最新消息:Welcome to the puzzle paradise for programmers! Here, a well-designed puzzle awaits you. From code logic puzzles to algorithmic challenges, each level is closely centered on the programmer's expertise and skills. Whether you're a novice programmer or an experienced tech guru, you'll find your own challenges on this site. In the process of solving puzzles, you can not only exercise your thinking skills, but also deepen your understanding and application of programming knowledge. Come to start this puzzle journey full of wisdom and challenges, with many programmers to compete with each other and show your programming wisdom! Translated with DeepL.com (free version)

javascript - TypeError: Object of type 'Undefined' is not JSON serializable - Stack Overflow

matteradmin2PV0评论

I'm getting this error when I attempt to submit the form. I'm not exactly sure what doesn't have a value/isn't defined, and was looking for guidance as the traceback didn't offer much insight for me at least. I had this error before when I attempted to run the page for the first time, and it was resolved by putting form=form into render_template's parameter. I believe the issue is in views.py, but let me know if I'm missing code or anything else. Thanks

views.py

@blueprint.route("register/")
def register_page():
    """Renders register site landing page."""
    form = RegisterForm()
    return render_template('main/register.html', page_title="Register", form=form, media_types=current_app.config["ACCEPTED_"
                                                          "MEDIA_TYPE"])


@blueprint.route("register/", methods=['GET', 'POST'])
def register():
    """Renders register page."""
    form = RegisterForm()
    if request.method == 'POST':
        if not form.validate_on_submit():
            return render_template('main/register.html', page_title="Service Registration",
                                   form=form, form_success=False)
        # If pany does not exist, create it
        if err:
            pany, err = create_pany(formanization.data)
            if err:
                return render_template('main/register.html', page_title="Service Registration",
                                       form=form, form_success=False, message=err)
        if err:
            return render_template('main/register.html', page_title="Service Registration",
                                   form=form, form_success=False, message=err)
        if err:
            return render_template('main/register.html', page_title="Service Registration",
                                   form=form, form_success=False, message=err)
        else:
            success_msg = "Your ticket id is {}. You should receive an email with a link to your ticket."
                .format(ticket.get('id'))
            return render_template('main/register.html', page_title="Service Registration",
                                   form=form, form_success=True, message=success_msg)
    return render_template('main/register.html', page_title="Service Registration",
                           form=form)

javascript

var validateContentType = function() {
            var contentType = $('#upload').prop('files')[0].type;

            console.log(contentType, contentType2, contentType3, contentType4, contentType5, contentType6, contentType7);
            var contentTypes = contentType.split('/');

            var MIMEType = contentTypes[0];

            var mediaType = contentTypes[1];

            switch(MIMEType) {
                case 'video':
                    return true;
                case 'image':
                    return true;
                case 'application':
                    if ({{ media_types|tojson }}.indexOf(mediaType) != -1) {
                        return true;
                    } else {
                        return false;
                    }
                default:
                    return false;
            }
        };

traceback

Traceback (most recent call last):
  File "C:\Users\snguyen\Documents\Nevco_Support\venv\lib\site-packages\flask\app.py", line 1997, in __call__
    return self.wsgi_app(environ, start_response)
  File "C:\Users\snguyen\Documents\Nevco_Support\venv\lib\site-packages\flask\app.py", line 1985, in wsgi_app
    response = self.handle_exception(e)
  File "C:\Users\snguyen\Documents\Nevco_Support\venv\lib\site-packages\flask\app.py", line 1540, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "C:\Users\snguyen\Documents\Nevco_Support\venv\lib\site-packages\flask\_pat.py", line 33, in reraise
    raise value
  File "C:\Users\snguyen\Documents\Nevco_Support\venv\lib\site-packages\flask\app.py", line 1982, in wsgi_app
    response = self.full_dispatch_request()
  File "C:\Users\snguyen\Documents\Nevco_Support\venv\lib\site-packages\flask\app.py", line 1614, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "C:\Users\snguyen\Documents\Nevco_Support\venv\lib\site-packages\flask\app.py", line 1517, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "C:\Users\snguyen\Documents\Nevco_Support\venv\lib\site-packages\flask\_pat.py", line 33, in reraise
    raise value
  File "C:\Users\snguyen\Documents\Nevco_Support\venv\lib\site-packages\flask\app.py", line 1612, in full_dispatch_request
    rv = self.dispatch_request()
  File "C:\Users\snguyen\Documents\Nevco_Support\venv\lib\site-packages\flask\app.py", line 1598, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "C:\Users\snguyen\Documents\Nevco_Support\nevco-support\nevco_support\main\views.py", line 151, in register
    form=form, form_success=False)
  File "C:\Users\snguyen\Documents\Nevco_Support\venv\lib\site-packages\flask\templating.py", line 134, in render_template
    context, ctx.app)
  File "C:\Users\snguyen\Documents\Nevco_Support\venv\lib\site-packages\flask\templating.py", line 116, in _render
    rv = template.render(context)
  File "C:\Users\snguyen\Documents\Nevco_Support\venv\lib\site-packages\jinja2\asyncsupport.py", line 76, in render
    return original_render(self, *args, **kwargs)
  File "C:\Users\snguyen\Documents\Nevco_Support\venv\lib\site-packages\jinja2\environment.py", line 1008, in render
    return self.environment.handle_exception(exc_info, True)
  File "C:\Users\snguyen\Documents\Nevco_Support\venv\lib\site-packages\jinja2\environment.py", line 780, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "C:\Users\snguyen\Documents\Nevco_Support\venv\lib\site-packages\jinja2\_pat.py", line 37, in reraise
    raise value.with_traceback(tb)
  File "C:\Users\snguyen\Documents\Nevco_Support\nevco-support\nevco_support\templates\main\register.html", line 2, in top-level template code
    {% from 'content/helpers.html' import render_field %}
  File "C:\Users\snguyen\Documents\Nevco_Support\nevco-support\nevco_support\templates\layout.html", line 36, in top-level template code
    {% block body %}
  File "C:\Users\snguyen\Documents\Nevco_Support\nevco-support\nevco_support\templates\layout.html", line 81, in block "body"
    {% block js %}
  File "C:\Users\snguyen\Documents\Nevco_Support\nevco-support\nevco_support\templates\main\register.html", line 848, in block "js"
    if ({{ media_types|tojson }}.indexOf(mediaType) != -1) {
  File "C:\Users\snguyen\Documents\Nevco_Support\venv\lib\site-packages\flask\json.py", line 269, in tojson_filter
    return Markup(htmlsafe_dumps(obj, **kwargs))
  File "C:\Users\snguyen\Documents\Nevco_Support\venv\lib\site-packages\flask\json.py", line 183, in htmlsafe_dumps
    rv = dumps(obj, **kwargs) \
  File "C:\Users\snguyen\Documents\Nevco_Support\venv\lib\site-packages\flask\json.py", line 123, in dumps
    rv = _json.dumps(obj, **kwargs)
  File "C:\Users\snguyen\AppData\Local\Programs\Python\Python36-32\lib\json\__init__.py", line 238, in dumps
    **kw).encode(obj)
  File "C:\Users\snguyen\AppData\Local\Programs\Python\Python36-32\lib\json\encoder.py", line 199, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "C:\Users\snguyen\AppData\Local\Programs\Python\Python36-32\lib\json\encoder.py", line 257, in iterencode
    return _iterencode(o, 0)
  File "C:\Users\snguyen\Documents\Nevco_Support\venv\lib\site-packages\flask\json.py", line 80, in default
    return _json.JSONEncoder.default(self, o)
  File "C:\Users\snguyen\AppData\Local\Programs\Python\Python36-32\lib\json\encoder.py", line 180, in default
    o.__class__.__name__)
TypeError: Object of type 'Undefined' is not JSON serializable

I'm getting this error when I attempt to submit the form. I'm not exactly sure what doesn't have a value/isn't defined, and was looking for guidance as the traceback didn't offer much insight for me at least. I had this error before when I attempted to run the page for the first time, and it was resolved by putting form=form into render_template's parameter. I believe the issue is in views.py, but let me know if I'm missing code or anything else. Thanks

views.py

@blueprint.route("register/")
def register_page():
    """Renders register site landing page."""
    form = RegisterForm()
    return render_template('main/register.html', page_title="Register", form=form, media_types=current_app.config["ACCEPTED_"
                                                          "MEDIA_TYPE"])


@blueprint.route("register/", methods=['GET', 'POST'])
def register():
    """Renders register page."""
    form = RegisterForm()
    if request.method == 'POST':
        if not form.validate_on_submit():
            return render_template('main/register.html', page_title="Service Registration",
                                   form=form, form_success=False)
        # If pany does not exist, create it
        if err:
            pany, err = create_pany(formanization.data)
            if err:
                return render_template('main/register.html', page_title="Service Registration",
                                       form=form, form_success=False, message=err)
        if err:
            return render_template('main/register.html', page_title="Service Registration",
                                   form=form, form_success=False, message=err)
        if err:
            return render_template('main/register.html', page_title="Service Registration",
                                   form=form, form_success=False, message=err)
        else:
            success_msg = "Your ticket id is {}. You should receive an email with a link to your ticket."
                .format(ticket.get('id'))
            return render_template('main/register.html', page_title="Service Registration",
                                   form=form, form_success=True, message=success_msg)
    return render_template('main/register.html', page_title="Service Registration",
                           form=form)

javascript

var validateContentType = function() {
            var contentType = $('#upload').prop('files')[0].type;

            console.log(contentType, contentType2, contentType3, contentType4, contentType5, contentType6, contentType7);
            var contentTypes = contentType.split('/');

            var MIMEType = contentTypes[0];

            var mediaType = contentTypes[1];

            switch(MIMEType) {
                case 'video':
                    return true;
                case 'image':
                    return true;
                case 'application':
                    if ({{ media_types|tojson }}.indexOf(mediaType) != -1) {
                        return true;
                    } else {
                        return false;
                    }
                default:
                    return false;
            }
        };

traceback

Traceback (most recent call last):
  File "C:\Users\snguyen\Documents\Nevco_Support\venv\lib\site-packages\flask\app.py", line 1997, in __call__
    return self.wsgi_app(environ, start_response)
  File "C:\Users\snguyen\Documents\Nevco_Support\venv\lib\site-packages\flask\app.py", line 1985, in wsgi_app
    response = self.handle_exception(e)
  File "C:\Users\snguyen\Documents\Nevco_Support\venv\lib\site-packages\flask\app.py", line 1540, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "C:\Users\snguyen\Documents\Nevco_Support\venv\lib\site-packages\flask\_pat.py", line 33, in reraise
    raise value
  File "C:\Users\snguyen\Documents\Nevco_Support\venv\lib\site-packages\flask\app.py", line 1982, in wsgi_app
    response = self.full_dispatch_request()
  File "C:\Users\snguyen\Documents\Nevco_Support\venv\lib\site-packages\flask\app.py", line 1614, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "C:\Users\snguyen\Documents\Nevco_Support\venv\lib\site-packages\flask\app.py", line 1517, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "C:\Users\snguyen\Documents\Nevco_Support\venv\lib\site-packages\flask\_pat.py", line 33, in reraise
    raise value
  File "C:\Users\snguyen\Documents\Nevco_Support\venv\lib\site-packages\flask\app.py", line 1612, in full_dispatch_request
    rv = self.dispatch_request()
  File "C:\Users\snguyen\Documents\Nevco_Support\venv\lib\site-packages\flask\app.py", line 1598, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "C:\Users\snguyen\Documents\Nevco_Support\nevco-support\nevco_support\main\views.py", line 151, in register
    form=form, form_success=False)
  File "C:\Users\snguyen\Documents\Nevco_Support\venv\lib\site-packages\flask\templating.py", line 134, in render_template
    context, ctx.app)
  File "C:\Users\snguyen\Documents\Nevco_Support\venv\lib\site-packages\flask\templating.py", line 116, in _render
    rv = template.render(context)
  File "C:\Users\snguyen\Documents\Nevco_Support\venv\lib\site-packages\jinja2\asyncsupport.py", line 76, in render
    return original_render(self, *args, **kwargs)
  File "C:\Users\snguyen\Documents\Nevco_Support\venv\lib\site-packages\jinja2\environment.py", line 1008, in render
    return self.environment.handle_exception(exc_info, True)
  File "C:\Users\snguyen\Documents\Nevco_Support\venv\lib\site-packages\jinja2\environment.py", line 780, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "C:\Users\snguyen\Documents\Nevco_Support\venv\lib\site-packages\jinja2\_pat.py", line 37, in reraise
    raise value.with_traceback(tb)
  File "C:\Users\snguyen\Documents\Nevco_Support\nevco-support\nevco_support\templates\main\register.html", line 2, in top-level template code
    {% from 'content/helpers.html' import render_field %}
  File "C:\Users\snguyen\Documents\Nevco_Support\nevco-support\nevco_support\templates\layout.html", line 36, in top-level template code
    {% block body %}
  File "C:\Users\snguyen\Documents\Nevco_Support\nevco-support\nevco_support\templates\layout.html", line 81, in block "body"
    {% block js %}
  File "C:\Users\snguyen\Documents\Nevco_Support\nevco-support\nevco_support\templates\main\register.html", line 848, in block "js"
    if ({{ media_types|tojson }}.indexOf(mediaType) != -1) {
  File "C:\Users\snguyen\Documents\Nevco_Support\venv\lib\site-packages\flask\json.py", line 269, in tojson_filter
    return Markup(htmlsafe_dumps(obj, **kwargs))
  File "C:\Users\snguyen\Documents\Nevco_Support\venv\lib\site-packages\flask\json.py", line 183, in htmlsafe_dumps
    rv = dumps(obj, **kwargs) \
  File "C:\Users\snguyen\Documents\Nevco_Support\venv\lib\site-packages\flask\json.py", line 123, in dumps
    rv = _json.dumps(obj, **kwargs)
  File "C:\Users\snguyen\AppData\Local\Programs\Python\Python36-32\lib\json\__init__.py", line 238, in dumps
    **kw).encode(obj)
  File "C:\Users\snguyen\AppData\Local\Programs\Python\Python36-32\lib\json\encoder.py", line 199, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "C:\Users\snguyen\AppData\Local\Programs\Python\Python36-32\lib\json\encoder.py", line 257, in iterencode
    return _iterencode(o, 0)
  File "C:\Users\snguyen\Documents\Nevco_Support\venv\lib\site-packages\flask\json.py", line 80, in default
    return _json.JSONEncoder.default(self, o)
  File "C:\Users\snguyen\AppData\Local\Programs\Python\Python36-32\lib\json\encoder.py", line 180, in default
    o.__class__.__name__)
TypeError: Object of type 'Undefined' is not JSON serializable
Share Improve this question edited Jun 20, 2018 at 14:32 Steven Nguyen asked Jun 20, 2018 at 13:57 Steven NguyenSteven Nguyen 811 gold badge3 silver badges11 bronze badges 3
  • 2 Please reduce this to the minimal needed to reproduce the issue, and include the full traceback of the error. – Martijn Pieters Commented Jun 20, 2018 at 14:15
  • I believe I have reduced it to the minimum amount of code. Let me know if this suffices. – Steven Nguyen Commented Jun 20, 2018 at 14:34
  • I wonder if the error occur if you’d uploaded a file as opposed to default switch case where there is no file.. – boateng Commented Jun 20, 2018 at 15:05
Add a ment  | 

1 Answer 1

Reset to default 1

You didn't pass in media_types into any of your render_template() calls in the register route. For the specific traceback you gave, the culprit is here:

return render_template('main/register.html', page_title="Service Registration",
                       form=form, form_success=False)

but his also applies to the other render_template() calls. You can see this in the traceback:

Traceback (most recent call last):
  # [...]
  # line pointing to the register() function, where the above render_template()
  # call is made
  File "C:\Users\snguyen\Documents\Nevco_Support\nevco-support\nevco_support\main\views.py", line 151, in register
    form=form, form_success=False)
  # [...]
  # which leads to this template line, where media_types|tojson is output
  File "C:\Users\snguyen\Documents\Nevco_Support\nevco-support\nevco_support\templates\main\register.html", line 848, in block "js"
    if ({{ media_types|tojson }}.indexOf(mediaType) != -1) {
  # The next line is tojson filter being called
  File "C:\Users\snguyen\Documents\Nevco_Support\venv\lib\site-packages\flask\json.py", line 269, in tojson_filter
    return Markup(htmlsafe_dumps(obj, **kwargs))
  # [...]
  # and the exception tells us something is not serializable, the Undefined object.
TypeError: Object of type 'Undefined' is not JSON serializable

Jinja2 uses Undefined for any variable that has not been set for the template. From the template documentation:

If a variable or attribute does not exist, you will get back an undefined value. What you can do with that kind of value depends on the application configuration: the default behavior is to evaluate to an empty string if printed or iterated over, and to fail for every other operation.

You need to either pass in a value for media_types to all calls, or set a default if the value is missing, like an empty string:

if ({{ media_types|default("")|tojson }}.indexOf(mediaType) != -1) {
Post a comment

comment list (0)

  1. No comments so far