The very best way is to let someone else do it for you.
The second best way, well this depends on what ‘best’ means for you (easy, fast, good looking, few lines of code, not much work with modeling, large scale, …). Usualy there are two basic approaches, each with it’s own adavantages and disadvantages:
Using a heightfield, for example with GeoMipTerrain. Then you just need a heighmap and no model at all.
2.) Using static meshes. Here you will need to model the terrain, for example with Blender, and then export the mesh to Panda3D.
For textures it is again the same, it depends on what ‘best’ means for you. A technique which is frequently used in modern games and which looks good is texture splattering. You will need a shader for this. AFAIK there are no out-of-the-box shader pipelines from Blender/Max/Maja/… to Panda3D.