Re: Why can't a Model have the same name as a View?

2013-08-08 Thread Mike Dewhirst

On 9/08/2013 4:13am, JJ Zolper wrote:

Hello everyone,

I've only been working with Python and Django for a couple of years now
and whenever I can I like to learn more about certain rationalizations
for certain decisions made within each of them.

In Django we define a Python class with a name to represent our model (I
think it's a python class at least) and then we write "def" for
definition of a view function or python function. To me I view this as
two separate types of structures and thus fairly often I give a model
the same name as a view. It isn't until later that I realize that my app
isn't working because of the fact that they have the same name. I'm here
just wondering if anyone would be willing to explain how this comes
about from how Python/Django treats this instance? Why does Django see a
confliction between a class and a function with the same name? Aren't
they entirely separate entities?

I'm by all means okay with going in and changing the names of the view
or model to something slightly different so everything works, I just
would like to understand conceptually why it is an issue?


Python uses namespaces a lot including inside a package, module, class 
and inside a def and if you bring two objects with the same name into 
the same namespace things will break.


However, you can do it if you don't import the object but instead 
preface it with its namespace. For example: foo(a model) and views.foo(a 
view)


Google for python namespace and you should see some good info.

hth



Thanks a lot,

JJ Zolper

--
You received this message because you are subscribed to the Google
Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send
an email to django-users+unsubscr...@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at http://groups.google.com/group/django-users.
For more options, visit https://groups.google.com/groups/opt_out.




--
You received this message because you are subscribed to the Google Groups "Django 
users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-users+unsubscr...@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at http://groups.google.com/group/django-users.
For more options, visit https://groups.google.com/groups/opt_out.




Re: Why can't a Model have the same name as a View?

2013-08-08 Thread Bill Freeman
Python variables don't have types.  They're just references.

You can call models and views by the same name.  But a bare name can only
have one value in a given python scope.

Thus, if in your views.py you do:

from models import Foo

you have set the view module's global scope's variable 'Foo' to be a
reference to that imported (presumably) models.Model subclass.  If later
you do:

def Foo(request):
...

then you have stored a new value in the view module's global scope's
variable 'Foo', a reference to a function.  Which you will get upon
reference depends on when (temporally, not lexically) you make the
reference with respect to when the function got defined.

On the other hand, you could do:

import models
def Foo(request):
...

And later 'Foo' will always refer to the function while 'models.Foo' will
always refer to the class.

Of course, the accepted convention is to name functions and methods all
lower case (or beginning with a lower case letter, at least, while class
names begin with an upper case letter.  If you follow this community
standard, your issue never arises.  If you insist on bringing the naming
conventions of another language into python, realize that other folks won't
want to work on, review, or help with your code.

Bill


On Thu, Aug 8, 2013 at 2:13 PM, JJ Zolper  wrote:

> Hello everyone,
>
> I've only been working with Python and Django for a couple of years now
> and whenever I can I like to learn more about certain rationalizations for
> certain decisions made within each of them.
>
> In Django we define a Python class with a name to represent our model (I
> think it's a python class at least) and then we write "def" for definition
> of a view function or python function. To me I view this as two separate
> types of structures and thus fairly often I give a model the same name as a
> view. It isn't until later that I realize that my app isn't working because
> of the fact that they have the same name. I'm here just wondering if anyone
> would be willing to explain how this comes about from how Python/Django
> treats this instance? Why does Django see a confliction between a class and
> a function with the same name? Aren't they entirely separate entities?
>
> I'm by all means okay with going in and changing the names of the view or
> model to something slightly different so everything works, I just would
> like to understand conceptually why it is an issue?
>
> Thanks a lot,
>
> JJ Zolper
>
> --
> You received this message because you are subscribed to the Google Groups
> "Django users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to django-users+unsubscr...@googlegroups.com.
> To post to this group, send email to django-users@googlegroups.com.
> Visit this group at http://groups.google.com/group/django-users.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-users+unsubscr...@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at http://groups.google.com/group/django-users.
For more options, visit https://groups.google.com/groups/opt_out.


Why can't a Model have the same name as a View?

2013-08-08 Thread JJ Zolper
Hello everyone,

I've only been working with Python and Django for a couple of years now and 
whenever I can I like to learn more about certain rationalizations for 
certain decisions made within each of them.

In Django we define a Python class with a name to represent our model (I 
think it's a python class at least) and then we write "def" for definition 
of a view function or python function. To me I view this as two separate 
types of structures and thus fairly often I give a model the same name as a 
view. It isn't until later that I realize that my app isn't working because 
of the fact that they have the same name. I'm here just wondering if anyone 
would be willing to explain how this comes about from how Python/Django 
treats this instance? Why does Django see a confliction between a class and 
a function with the same name? Aren't they entirely separate entities?

I'm by all means okay with going in and changing the names of the view or 
model to something slightly different so everything works, I just would 
like to understand conceptually why it is an issue?

Thanks a lot,

JJ Zolper

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-users+unsubscr...@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at http://groups.google.com/group/django-users.
For more options, visit https://groups.google.com/groups/opt_out.